socket接收数据掉包有关问题,

socket接收数据掉包问题,请教高手?
我做的是socket client端,而服务端采用的是push的方式,数据通信定义如下:
 包长度(4字节),包。先接收包长度4个字节,然后根据这个长度再接收包数据。
我采用的是recv线程,但是有时候得到的长度是无限长和无穷小的负数,郁闷。
但是人家采用的是c#,java写的客户端去接收数据的话,就没有问题,我估计是c#和java已经封装好了。
我该怎么办才好呢?

------解决方案--------------------
接收无非就是recv
能有什么问题呢
难道是小大端?
------解决方案--------------------
C/C++ code
nTotal = pDataFirst4[0] + (pDataFirst4[1] << 8) + (pDataFirst4[2] << 16) + (pDataFirst4[3] << 24);

------解决方案--------------------
探讨

目前的问题在于,因为接收的是同步数据,同步数据的序列号是递增的,我在接收之后进行解压,发现中间有些序列号是不递增的,比如,序列号末尾都是从0,1,2,。。。。9这几个数字,但是中间可能某个数据丢了,缺了3,等等其他结尾的数据。楼上兄弟说的方法,应该没有用处。因为长度的计算方法,就是我写出来的那个方法:
nTotal = pDataFirst4[0] + (pDataFirst4[1] << 8……

------解决方案--------------------
没细看你的代码,不过,从我的分析来看

假如第一次 socket 收到 2 个字节;
然后再收到 2 个字节,
然后再收到后面的有效数据,

似乎这个代码就不能正常处理了
------解决方案--------------------
探讨
最终确定,是解压函数的问题。
char **UnzipBuffer;
UnzipBuffer = (char **)calloc(5, sizeof(char));
memset(UnzipBuffer, 0, sizeof(UnzipBuffer));

int n = inflate_read(buffer, nRecvLenCount, UnzipBuffer, 1);//解压……