搜尋

首頁  >  問答  >  主體

网络编程 - Java调用DataOuputStream的write方法写入数据第一个字节不知所踪

大家讲道理大家讲道理2836 天前959

全部回覆(4)我來回復

  • 巴扎黑

    巴扎黑2017-04-18 10:38:57

    你處理TCP黏包問題了嗎?
    既然是TCP就得考慮粘包的问题。粘包問題不解決的話,你沒辦法確定哪些位元組才是一個包的開頭4個位元組。

    簡言之就是,你收到一大堆字節,然後這些字節的來源可能如下:

    • 兩三個包的所有位元組一起寄過來

    • 前一個包包的後半部和後一個包包的前半部位元組一起寄過來

    • 總之,就是半包或黏包的混合

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

    回覆
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:38:57

    不抓包在直接在java裡面input流讀出來是什麼?

    回覆
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:38:57

    這屬於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了,不需要在抓包上鑽牛角尖.
    希望能幫到你~

    回覆
    0
  • 迷茫

    迷茫2017-04-18 10:38:57

    調用flush了沒?

    回覆
    0
  • 取消回覆