通过socket不断接收计算结果数据,接收到数据后利用protocol buffer 进行反序列化会出错,错误指向如下图:
是由于socket发送数据时 是一次发送完,但是接收数据会存在分批次接收的原因。程序是设置为一次接收完毕,但是实际情况是socket会分批次接收数据,导致误以为未接收完的部分为新的一帧结果,从而出现数据的错乱。
解决代码(摘自论坛):
intnCount =...; // 总的字节数
charbuf[1024] = ...; // 每次发送1024个字节的内容
while(nCount)
{
sprint(buf,"%s", ...);
nRet = send(..., buf, strlen(buf)+1);
if(SOCKET_ERROR == nRet)
{
break; // Error
}
nCout -= nRet;
}
通过判断接收到的数据量是否为发送来的数据量来判断是否接受完一次的结果。信息传递不全的问题strcpy值复制22个字符
原因是0是NULL值,给其赋一个有效值(例如-999)就好了,在反序列化后再将这些值赋值为NULL.
本文讨论了在使用socket接收数据时遇到分批接收问题导致protocol buffer反序列化错误的情况,并提供了解决方案。重点在于通过判断接收数据量与发送数据量是否匹配来确保正确接收完整的数据帧。

6753

被折叠的 条评论
为什么被折叠?



