我使用tcp协议处理客户端的请求,我发现在使用“发送”功能时出现了一些内容丢失的现象。代码是一样的:
_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;
}
发送函数总是成功的,_tcslen(cData) 的值等于 send_count,cData[send_count-1] 是 ']'。但是当我使用wireshark(一个捕获工具)来捕获socket发出的数据包时,我发现一些内容总是丢失,包括']'的字符。内容是用 JSON 协议封装的,所以 ']' 很重要。每次发送的总大小为 8900 字节。但是当我将请求项一次(之前是100)更改为50时,没有遗漏任何东西,发回的大小约为4000字节。我不知道为什么会这样。
从我的日志文件中,我确定名为'cData'的数组包含全部内容,但是为什么wireshark捕获的数据包中的内容不完整?