c 中socket recv 的問題

2021-08-19 15:32:49 字數 524 閱讀 1411

同樣是在寫c++的server,socket需要recv(),用char buffer儲存讀取的位元組。

charbuffer[

buffer_size];

n = recv(clntsocket, buffer,

buffer_size, 0)

這裡的buffer在每次讀取之前必須清空!必須清空!

必須清空!

必須清空!

必須清空!

必須清空!

必須清空!

因為讀取的時候不一定填滿buffer_size,舉例來說,如果唯讀了10,那麼下次再讀取5,剩下的10 - 5 = 5就是髒資料。所以導致時而能過test case時而不能過。

正確做法是,在n = recv()之前,先:

memset(buffer, 0,

buffer_size);

找這個bug找了半天啊啊啊啊啊啊啊!

socket recv 函式返回0的一種情況

假設使用socket基於tcp通訊協議進行c s通訊程式設計,客服端已經成功與服務端建立tcp連線,並且可以正常進行收發資料。當一段時間後,服務端的程式如果呼叫closesocket sclient wsacleanup 函式關閉socket,那麼客戶端的recv 將會返回0 如果服務端沒有呼叫cl...

C與C 中的 問題

test.c include void change int a,int b,int c int main 執行 compiling.9.cd vcfile 9.c 4 error c2143 syntax error missing before d vcfile 9.c 4 error c214...

C 中 include的問題

f0305.cpp 定義控制台應用程式的入口點。string長度可伸縮,比字元陣列靈活 通過字元指標操作字串,容易出錯。但string效能略遜於字元指標。include stdafx.h include iostream include include string 這是c 裡面的標頭檔案與c語言中...