要小心java的OutputStream.writeUTF()函数。

        正在用JAVA写一段连接MSN服务器的代码,但是发现怎么给MSN服务器发送命令消息,结果都只有一个,那就是没有响应,随后Socket连接被关闭。

        发送消息的代码如下:
        public void send(String cmd)
         {
              try{
                   DataOutputStream dos = new DataOutputStream(sock_.getOutputStream());
                   dos.writeUTF(cmd);
                  }catch(Exception ex)
                  {
                   System.out.println("MSNPConnection::send fail, " + ex.getMessage());
                  }
         }
        刚开始以为给服务器发送的命令格式错了,于是把所有发送的数据包都截下来分析。在截包中发现一个奇怪的现象,在我发送的每个命令前都多出了两个字节,而且很明显是一个数字,于是开始领悟,莫非是writeUTF在其中搞怪?

        翻开JDK的文档,直接搜索writeUTF函数的说明,发现以下文字:
        

        writeUTF

     public void writeUTF(String str)
              throws IOException
Writes two bytes of length information to the output stream, followed by the Java modified UTF representation of every character in the string。

天啦,果然是被耍了,原来writeUTF会在开头自以为是的加上长度信息。


©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值