recv返回的长度正确,但是缓冲区的数据不正确
如题
char Stream[MAXLEN];
int len;
memset(Stream, '\0', MAXLEN);
len = recv(client, Stream, MAXLEN, 0);
printf("recieve len=%d,stream len=%d\n", len,strlen(Stream));
len的长度是正确的,但是Stream的长度小于len的长度。服务器发过来的数据是压缩过的,带有中文。uft-8编码。
MAXLEN 是1024 大于服务器返回的长度。
请问有神马原因可能导致此问题。有时候Stream的长度又是正确的。
是不是因为压缩的时候将某些字符变成了\0的原因。没有压缩的数据recv都是正常的。
[解决办法]
void HexDump(char *buf,int len) { int i,j,k; char binstr[80]; for (i=0;i<len;i++) { if (0==(i%16)) { sprintf(binstr,"%04x -",i); sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } else if (15==(i%16)) { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); sprintf(binstr,"%s ",binstr); for (j=i-15;j<=i;j++) { sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.'); } printf("%s\n",binstr); } else { sprintf(binstr,"%s %02x",binstr,(unsigned char)buf[i]); } } if (0!=(i%16)) { k=16-(i%16); for (j=0;j<k;j++) { sprintf(binstr,"%s ",binstr); } sprintf(binstr,"%s ",binstr); k=16-k; for (j=i-k;j<i;j++) { sprintf(binstr,"%s%c",binstr,('!'<buf[j]&&buf[j]<='~')?buf[j]:'.'); } printf("%s\n",binstr); }}
[解决办法]
感觉可能存在传输错误,你传输用什么校验的?校验通过了吗?
[解决办法]
是不是有填充字符???按接收到得len逐位打印出来,可能有填充0的,strlen能不能正确体现发送长度没测过
[解决办法]
有时候发送的内容并不一定全部都是有值的,或者说 可能存在'\0'值,strlen获取的长度,是把'\0'当做结束符的
这样说 对吗
[解决办法]
strlen是字符串长度, 压缩过的数据还是字符串吗?
[解决办法]