socket+Protocol buffer 错误

本文讨论了在使用socket接收数据时遇到分批接收问题导致protocol buffer反序列化错误的情况,并提供了解决方案。重点在于通过判断接收数据量与发送数据量是否匹配来确保正确接收完整的数据帧。

通过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个字符

在用PB进行序列化后数据丢失的,如下所示

原因是0是NULL值,给其赋一个有效值(例如-999)就好了,在反序列化后再将这些值赋值为NULL.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值