110,534
社区成员
发帖
与我相关
我的任务
分享
Debug.Print(.....)
打印收到的数据内容,然后在你的“包头不全、包体不全”时写断言,让vs 立刻进入调试,查看最近的日志来判断到底是 EndReceive 收信息不对还是你的 receive 数组中的数据不对。[quote=引用 9 楼 wddw1986 的回复:] 1,首先确定是否丢包,发送的包和接收的包数量是否一致,排除粘包的可能(个人认为你的问题粘包的可能不大,因为粘包不会每次都是一样的症状); 2,检查发包的内容,这个问题发包的时候就出错的可能性不小; 3,检查缓冲区处理的逻辑,有可能缓冲区在多线程操作的情况下被覆盖了(可能较大); 4,检查组包和拆包的逻辑(可能性较小);
1,首先确定是否丢包,发送的包和接收的包数量是否一致,排除粘包的可能(个人认为你的问题粘包的可能不大,因为粘包不会每次都是一样的症状); 2,检查发包的内容,这个问题发包的时候就出错的可能性不小; 3,检查缓冲区处理的逻辑,有可能缓冲区在多线程操作的情况下被覆盖了(可能较大); 4,检查组包和拆包的逻辑(可能性较小);
当你的 recieveLength 远大于 need 的时候,怎么能不丢数据的?说明一下。 另外就是你的代码看上去应该精简掉 90%,感觉写得很大很臃肿,无用的代码太多了。应该精简。
报文加上 CRC 校验,这样你就可以知道什么时候出的错
其实你并不知道哪儿错了! 你应该在出现错误时保存现场,这样才能分析出原因,依据保存的现场数据,你就有可能再现错误
谢谢大佬,我知道什么时候出错,我是要解决这个错误。。。 [quote=引用 1 楼 xuzuning 的回复:] 报文加上 CRC 校验,这样你就可以知道什么时候出的错