我用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捕獲的數據包中的內容不完整?
有沒有更晚的數據包包含其餘的數據? –
剩餘的數據丟失,以後的數據包。 –