導航:首頁 > 編程語言 > socket編程recv

socket編程recv

發布時間:2025-01-15 14:17:26

『壹』 Socket send函數和recv函數詳解

send函數

在Socket編程中,send函數用於向TCP連接另一端發送數據。無論客戶端或伺服器應用程序,均能使用此函數。客戶端通常用send向伺服器發送請求,而伺服器則用它回應客戶端。該函數接受套接字描述符、發送數據緩沖區、數據位元組數及標志參數作為輸入。函數比較要發送的數據長度與套接字的發送緩沖區大小。若大於,則返回SOCKET_ERROR。若小於或等於,則檢查協議是否正在發送數據或套接字緩沖區是否有數據。若協議未開始發送或無數據,則比較剩餘空間與數據長度。若大於,則等待協議發送數據;若小於,則將數據復制到剩餘空間。成功復制後,返回實際復制的位元組數。出現錯誤時,返回SOCKET_ERROR。若在等待協議發送數據時網路中斷,也返回SOCKET_ERROR。在Unix系統下,進程會收到SIGPIPE信號,處理終止。對於非同步Socket的send函數,在網路剛斷開時仍能發送,並返回相應位元組數,select檢測也是可寫的,但稍後再次發送會出錯。select檢測無法檢測出可寫狀態。

recv函數

recv函數用於從TCP連接另一端接收數據。客戶端和伺服器應用程序都可使用此函數。函數接收套接字描述符、接收數據緩沖區、數據長度及標志參數。執行流程如下:等待s的發送緩沖中的數據被協議完全傳輸。若在傳輸中出現網路錯誤,返回SOCKET_ERROR。若發送緩沖無數據或數據傳輸完畢,檢查套接字接收緩沖區。若無數據或協議正在接收數據,則等待協議接收完畢。將s接收緩沖中的數據復制到buf中,返回實際復制的位元組數。復制時出現錯誤,返回SOCKET_ERROR。若在等待協議接收數據時網路中斷,返回0。在Unix系統下,進程會收到SIGPIPE信號,處理終止。

『貳』 在socket編程中怎麼判斷recv是否接收完成

recv函數怎麼判斷接收結束:
1、例如在數據流中帶個結束標識,那樣讀到結束標識就知道傳輸完成,停止。 這種方法只能用傳輸文本文件,有個文件結束符,二進制文件不行。

2、先傳個長度,那麼接收方就可以控制 接下來要讀取多少個位元組的數據才算完成。這個適合傳輸任何文件。

例子:
C/C++ code
client的發函數為:char line[MAXLINE]; while ((fgets(line,MAXLINE,fd)!=NULL) // fd 為一個文件的指針 {send (connfd, line,strlen(line),0) // connfd為 socket}server 的接收函數為:for (;;) {if ((n=recv(connfd, recvline,MAXLINE,0)>0) {recvline[n]=0;fputs(stdout,recvline);else break;}}
當發端停止發送後,收端無法得知數據已經傳輸完畢,從而一直在for中死循環,可以用以上方法判斷接收結束。

閱讀全文

與socket編程recv相關的資料

熱點內容
數控5軸編程培訓一般多久 瀏覽:558
cadpdf圖層 瀏覽:248
用登號器出現伺服器未響應是什麼 瀏覽:903
java演算法是什麼 瀏覽:634
程序員cc發展方向 瀏覽:987
智慧黑板在哪裡下載app 瀏覽:311
男生穿衣搭配app哪個好 瀏覽:596
光大信用卡年費在app哪裡可以看 瀏覽:211
如何在找機平台下載app 瀏覽:395
西安php工作好找嗎 瀏覽:927
outlook命令 瀏覽:229
程序員那麼可愛主角介紹 瀏覽:934
銀行卡簡訊消息如何加密 瀏覽:246
文件夾怎麼不重名 瀏覽:406
linuxyum安裝java 瀏覽:250
java數字計算 瀏覽:286
java按鈕文字 瀏覽:641
python列表互換位置 瀏覽:337
sw怎麼刪除定向命令 瀏覽:757
php包含數組元素 瀏覽:666