网络编程 - Java调用DataOuputStream的write方法写入数据第一个字节不知所踪
大家讲道理
大家讲道理 2017-04-18 10:36:57
0
4
842
大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

Antworte allen (4)
巴扎黑

你处理TCP粘包问题了吗?
既然是TCP就不得不考虑粘包的问题。粘包问题不解决的话,你没办法确定哪些字节才是一个包的开头4个字节。

简言之就是,你收到一大堆字节,然后这些字节的来源可能如下:

  • 两三个包的所有字节一起发过来

  • 前一个包的后半部分和后一个包的前半部分字节一起发过来

  • 总之,就是半包或者粘包的混合

我们用的是netty,tcp粘包的问题,这里有一个很好阐述和基于netty的解决方案:https://my.oschina.net/andylu...

    伊谢尔伦

    不抓包在直接在java里面input流读出来是什么?

      巴扎黑

      这属于socket通信包头问题,我之前的项目是这么处理的,代码段如下:

      send(String url, int port, String content){ Socket socket = null; OutputStream out = null; DataOutputStream dataOutputStream = null; try { socket = new Socket(url, port); out = socket.getOutputStream(); dataOutputStream = new DataOutputStream(out); dataOutputStream.writeInt(content.getBytes().length); dataOutputStream.write(content.getBytes()); dataOutputStream.flush(); ... } }

      建议写一个接收socket来Debug调试,抓包工具没用过.或者和对方联调,对方能收到并成功解析就OK了,不需要在抓包上钻牛角尖.
      希望能帮到你~

        迷茫

        调用flush了没?

          Neueste Downloads
          Mehr>
          Web-Effekte
          Quellcode der Website
          Website-Materialien
          Frontend-Vorlage
          Über uns Haftungsausschluss Sitemap
          Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!