C++ socket编程,server端接收的数据不完整解决思路

C++ socket编程,server端接收的数据不完整C++socket编程,server端接收的数据不完整,中间参杂十六进制的CDC

C++ socket编程,server端接收的数据不完整
C++socket编程,server端接收的数据不完整,中间参杂十六进制的CDCDCDCD,请问是怎么回事?

[code=C/C++][/code]
client发送端
  int sendLen = 0;
connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));
char *p = (char *)buffer;//buffer是unsigned int型数据
for(int i=0;i<16;i++)
{
sendLen += send(sockClient,p,4000,0);
p = p+4000;
}

[code=C/C++][/code]
server接收端
int readLen = 0;
SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient, &SOCKADDRLen); 
char *p = (char*)rawDataBuffer;//rawDataBuffer是unsigned int型
for(int i=0; i<16; i++)
{
readLen += recv(sockConn, p, 4000, 0);
p = p + 4000;
}

调试发现sendLen是正确的,readLen不正确,比sendLen小。
另外接收数据中还参杂了十六进制的CDCDCDCD,这些数据也不知是如何产生的。

请问这是怎么回事?多谢了!

[解决办法]
CDCDCDCD 是未初始化的数据
[解决办法]
sendLen += send(sockClient,p,4000,0);
p = p+4000;

实际发送和接收不一定是4000。判断下返回值。
[解决办法]
6楼正解
一般情况下你的sendLen都等于4000,但并不是肯定会等于4000,取决于一些发送机制的参数设置,可能最终拆分为几个包
接收的时候,传输过程以及底层接收的时候,对于大数据包,接收的时候还是要根据返回值(返回值表示接收到的长度)来判断已接收到的