Socket定义协议后解析偶尔报错

时间:2021-12-10 20:22:21
前不久刚根据几位论坛中的朋友的建议在发送文件时进行了协议的定义
但是现在出现了一些问题,希望大家帮助下


在解析协议时有时无法正确解析
在协议中小弟只规定了传输信息的长度,其他的都没定义。谁能给点建议

5 个解决方案

#1


谁知道你怎么定的,怎么解的...
你先找个例子看看去吧,一般的协议如何去定义。

#2


receivecSocket.Receive(byte[] buffer)

byte[] blbuffer=new byte[4];
Array.Copy(buffer,0,blbuffer,0,4);
Econdig.UTF8.GetString(blbuuer);

在这里的时候就出错了

#3


判断buffer的长度

tcp中接收数据要考虑是否沾包  仅仅自己定义消息协议是不够的  还要处理接受的数据是否完整等等。。

#4


可是我的这个字节数据就是用来定义传输流的长度的啊,这个都不能保证完整性的话,那其他的还如何解析啊。。。

#5


不好意思,我的buffer长度绝对要大于4的,因为编码的机器和这个不是一个,不大方便帖出全部代码。单是在前边已经判断过了数据长度和缓存长度了。

#1


谁知道你怎么定的,怎么解的...
你先找个例子看看去吧,一般的协议如何去定义。

#2


receivecSocket.Receive(byte[] buffer)

byte[] blbuffer=new byte[4];
Array.Copy(buffer,0,blbuffer,0,4);
Econdig.UTF8.GetString(blbuuer);

在这里的时候就出错了

#3


判断buffer的长度

tcp中接收数据要考虑是否沾包  仅仅自己定义消息协议是不够的  还要处理接受的数据是否完整等等。。

#4


可是我的这个字节数据就是用来定义传输流的长度的啊,这个都不能保证完整性的话,那其他的还如何解析啊。。。

#5


不好意思,我的buffer长度绝对要大于4的,因为编码的机器和这个不是一个,不大方便帖出全部代码。单是在前边已经判断过了数据长度和缓存长度了。