有个项目用了TCP实时传输数据(频率很快,100ms左右发一次)。
我在接收端发现有时数据包会有一些无意义的数据,我只能丢弃。我想问问,这些数据包怎么会出现?
如果服务端发送了这些无意义的数据,如何确认位置呢?不好调试啊~
希望有经验的朋友告诉下!

解决方案 »

  1.   

    都检查看看。tcp不会给你加数据的。
      

  2.   

    检查发送buffer大小和实际数据大小是否一致
      

  3.   

    tcp需要做拼包处理,是否拼包有问题?
    比如客户端1发送12345,客户端2发送了9988。
    恰巧客户端1和客户端2发送的包都被拆分成了多个包,如客户端端一被拆成了123 4 5 三个包,客户端2被拆成了99 88两个包,这样很有可能收包成了如下顺序 123 99 4 88 5.tcp是不会乱产生数据的,调网络关键一点不要把异常问题归咎到协议上,问题肯定是出在逻辑上。
      

  4.   

    tcp会发送心跳包来维护链路的 
      

  5.   

    tcp最重要的就是一定要接和发对应
    发一次收一次
    你的问题还有可能是发送的时候你本地用的buffer没有每次都清空,另外send返回的长度一定要加判断
      

  6.   

    TCP是流协议,处理不好有粘包现象,你的问题可能是由于粘包引起的,你可以适当的降低发送的速度或者每次发送包的大小试试
      

  7.   

    但客户端得缓冲区自己可以定义的,你每次接受固定的大小再加以判断 不就可以排除益处的问题吗?
            你的服务器端口是不是设置除了客户端 还有其他程序使用啊 ,tcp是不会产生数据的啊?     你客户端发送数据的时候放入缓冲区 会不会除问题了啊