我用tcp协议来处理客户端的请求,发现一个现象,就是使用'send'函数时丢失了一些内容。代码是作为同胞:函数'send'的某些内容丢失
_stprintf(cData,"[%s]",send_back);
memset(send_back,0,sizeof(cData));
int send_count;
if((send_count=send(service_sock,cData,_tcslen(cData),0))!=SOCKET_ERROR){
fwrite(cData,sizeof(char),_tcslen(cData),hFile);
fflush(hFile);
g_log->print_log("%c%c%c%c",cData[0],cData[1],cData[2],cData[send_count-1]);
g_log->print_log("buffer len is :%d , send %d bytes",_tcslen(cData),send_count);
fclose(hFile);
memset(cData,0,sizeof(cData));
return true;
}
发送功能是总是成功的,和(CDATA)_tcslen的值等于send_count和CDATA [send_count-1]是 ']'。 但是,当我使用wireshark(捕获工具)捕获由套接字发出的数据包时,我发现一些内容总是丢失,包括']'的字符。内容由JSON协议封装,所以']'是重要的。每次发送的总大小为8900字节。但是,当我将请求项目一次(之前是100)更改为50时,没有任何遗漏,发回的大小约为4000字节。 我不知道为什么会发生这种情况。
从我的日志文件中,我确定名为'cData'的数组包含全部内容,但为什么wireshark捕获的数据包中的内容不完整?
有没有更晚的数据包包含其余的数据? –
剩余的数据丢失,以后的数据包。 –