111,120
社区成员
发帖
与我相关
我的任务
分享
实在找不出bug,只好来求助大佬们了。Debug.Print(.....)打印收到的数据内容,然后在你的“包头不全、包体不全”时写断言,让vs 立刻进入调试,查看最近的日志来判断到底是 EndReceive 收信息不对还是你的 receive 数组中的数据不对。[quote=引用 9 楼 wddw1986 的回复:] 1,首先确定是否丢包,发送的包和接收的包数量是否一致,排除粘包的可能(个人认为你的问题粘包的可能不大,因为粘包不会每次都是一样的症状); 2,检查发包的内容,这个问题发包的时候就出错的可能性不小; 3,检查缓冲区处理的逻辑,有可能缓冲区在多线程操作的情况下被覆盖了(可能较大); 4,检查组包和拆包的逻辑(可能性较小);
[/quote]
个人建议要重点检查发包的内容,因为你的收发逻辑感觉问题不大,因为出问题的概率小,如果底层有问题的话,数据量大,出错的情况会很大。
从应用层找错误吧,非常有可能不是通讯层的问题。

1,首先确定是否丢包,发送的包和接收的包数量是否一致,排除粘包的可能(个人认为你的问题粘包的可能不大,因为粘包不会每次都是一样的症状); 2,检查发包的内容,这个问题发包的时候就出错的可能性不小; 3,检查缓冲区处理的逻辑,有可能缓冲区在多线程操作的情况下被覆盖了(可能较大); 4,检查组包和拆包的逻辑(可能性较小);

当你的 recieveLength 远大于 need 的时候,怎么能不丢数据的?说明一下。 另外就是你的代码看上去应该精简掉 90%,感觉写得很大很臃肿,无用的代码太多了。应该精简。
报文加上 CRC 校验,这样你就可以知道什么时候出的错
这个就是我处理粘包和分包的代码呀。其实你并不知道哪儿错了! 你应该在出现错误时保存现场,这样才能分析出原因,依据保存的现场数据,你就有可能再现错误
谢谢大佬,我知道什么时候出错,我是要解决这个错误。。。 [quote=引用 1 楼 xuzuning 的回复:] 报文加上 CRC 校验,这样你就可以知道什么时候出的错