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

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

全部回覆(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了沒?

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!