1. 程式人生 > >Windows socket通訊出現接收資料時出現recv返回大於0,但緩衝區為大小為0的問題

Windows socket通訊出現接收資料時出現recv返回大於0,但緩衝區為大小為0的問題

服務端在ubuntu伺服器下,客戶端在windows下,採用socket進行通訊,在客戶端接收資料時,出現了詭異的情況,recv返回值大於0,但緩衝區大小為0,程式碼如下:

char buff[10];
int res=recv(ClientSocket, buff, 10, 0);
cout << res << endl;//返回8,表示有接收到資料
cout << strlen(buff) << endl;//返回0

採用wireshark進行抓包,檢視tcp流選項,顯示確實有資料

這裡寫圖片描述

發現前面有一大堆的空格,後檢視服務端程式碼,有補充0的情況,導致在用strlen計算緩衝區長度時出現問題(把0當成\0了?具體的也沒搞太明白),只為記錄下這詭異的情況。