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

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

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了没?

Beliebte Tutorials
Mehr>
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!