socket发送分包问题求解
大家好!小弟不才,学socket学到现在,还是有很多问题。
下面来求教一个分包的问题。
规定一个包的包头是S,包尾是E。接收端按照一次1024个字节来接收。
假如说我要发送8888个字节。我发送端按照协议装包之后,包中有该包的字节总长度(包的长度),还有包头,包尾,一次性发送这个包。
我接收端按照1024字节接收一次。这样的话,问题来了,我如何来判断接收完毕?
我开始的时候根据包的包头和包尾来判断,如果说接收到的这1024字节以S开始,我就默认为这个是含有包头的数据。假如说
原先已经接收到数据但是并没有接收完的(接收到的数据中没有包尾E标记,则默认为不完整的包),我就放弃原先接收到的
数据,然后来接收新的数据包。似乎这样看起来没什么问题,但是考虑到这样一种情况,就不知道如何处理了。假如我接收到
的第二个包,其实它只是我整个包的一部分,它恰恰以S为头,这样的话,我不就是以丢包现象来处理原先已经接收到的第一
个包了吗?还有第二个包,正好以E结尾,那么它不就被处理为接收到一个完整的包了吗?
假如说按照包的字节总长度来判断这个包是否已经接收完毕,假如接收到的数据产生丢包现象,我接收到了最后一个包,恰恰
这个包它没有包尾E(丢包了),现在又接收到了一个新数据,数据中以S开头(其实它是一个新的包),这样的话,我不是按
照旧的包的一部分来处理了吗?
不知道大虾们有没有好的方法呢?尽量不在发送端发送的时候,就人为的进行分包发送。只想在接收端分包接收,然后判断合
包。