首页  >  问答  >  正文

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

大家讲道理大家讲道理2765 天前907

全部回复(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
  • 取消回复