const int bufLen = 25600;
char buffer[bufLen];
string result = "";
int resultLen = 0;
resultLen = recv(sclient, buffer, bufLen, 0);
如上,在socket中通過recv接收資料,是否必須收到buflen這么多個位元組的資料才結束一次資料接收?
uj5u.com熱心網友回復:
int recv( SOCKET s, char FAR *buf, int len, int flags );不論是客戶還是服務器應用程式都用recv函式從TCP連接的另一端接收資料。
(1)第一個引數指定接收端套接字描述符;
(2)第二個引數指明一個緩沖區,該緩沖區用來存放recv函式接收到的資料;
(3)第三個引數指明buf的長度;
(4)第四個引數一般置0。
這里只描述同步Socket的recv函式的執行流程。當應用程式呼叫recv函式時,recv先等待s的發送緩沖中的資料被協議傳送完畢,如果協議在傳送s的發送緩沖中的資料時出現網路錯誤,那么recv函式回傳SOCKET_ERROR,如果s的發送緩沖中沒有資料或者資料被協議成功發送完畢后,recv先檢查套接字s的接識訓沖區,如果s接識訓沖區中沒有資料或者協議正在接收資料,那么recv就一直等待,只到協議把資料接收完畢。當協議把資料接收完畢,recv函式就把s的接識訓沖中的資料copy到buf中(注意協議接收到的資料可能大于buf的長度,所以在這種情況下要呼叫幾次recv函式才能把s的接識訓沖中的資料copy完。recv函式僅僅是copy資料,真正的接收資料是協議來完成的),recv函式回傳其實際copy的位元組數。如果recv在copy時出錯,那么它回傳SOCKET_ERROR;如果recv函式在等待協議接收資料時網路中斷了,那么它回傳0。
uj5u.com熱心網友回復:
版主的回答太長了,差評。這句:resultLen = recv(sclient, buffer, bufLen, 0); 如果一定要收到bufLen長的資料才回傳,那resultLen存在的意義是什么? 而且從你對它的命名,你自己就已經有答案了嘛。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/35843.html
標籤:網絡及通訊開發
上一篇:救救孩子吧
下一篇:JAVA核心
