现在的位置: 首页 > 综合 > 正文

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

2013年08月08日 ⁄ 综合 ⁄ 共 836字 ⁄ 字号 评论关闭
文章目录
        正在用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会在开头自以为是的加上长度信息。

抱歉!评论已关闭.