socket+Protocol buffer 错误

原创 2015年07月09日 11:49:30

通过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.



C#使用Protocol Buffer(ProtoBuf)进行对象的序列化与反序列化

Protocol Buffer是Google开发的数据格式,也是除了XML和JSON之外人气第三高的^^需要的朋友可以参考下 首先来说一下本文中例子所要实现的功能: 基于Proto...

C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

From: http://www.jb51.net/article/82795.htm 这篇文章主要介绍了C#使用Protocol Buffer(ProtoBuf)进行Unity的S...

google protocol buffer协议的socket通信实例

package lm; message helloworld  {  required int32 id = 1; // ID required string str = 2; // ...

C#使用Protocol Buffer(ProtoBuf)进行Unity中的Socket通信

这篇文章主要介绍了C#使用Protocol Buffer(ProtoBuf)进行Unity的Socket通信的实例,Protocol Buffer是Google开发的数据格式,也是除了XML和JSON...

unity 可用的protocol buffer

  • 2015年12月31日 00:31
  • 5.07MB
  • 下载

【Protocol Buffer】Protobuf的序列化和反序列化

前言 目前主流的几种数据交互的格式主要有xml、json、protobuf等等。一般的web项目中,最流行的主要还是json。因为浏览器对于json数据支持非常好,有很多内建的函数支持。xml数据...

用Protocol Buffer实现的学生信息Demo

  • 2012年10月16日 20:18
  • 327KB
  • 下载

protocol buffer 3.0.0

  • 2016年07月23日 19:22
  • 3.5MB
  • 下载

Protocol Buffer技术深入理解(C++实例)

、生成目标语言代码 下面的命令帮助我们将MyMessage.proto文件中定义的一组Protocol Buffer格式的消息编译成目标语言(C++)的代码。至于消息的内容,我们会在后面以分段的形...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:socket+Protocol buffer 错误
举报原因:
原因补充:

(最多只允许输入30个字)