導航:首頁 > 編程語言 > 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相關的資料

熱點內容
小米手錶怎麼復制加密卡 瀏覽:699
雲伺服器跑腳本掙錢 瀏覽:746
跳舞解壓釋放 瀏覽:351
內存測試軟體檢測加密 瀏覽:913
工作表頭文件加密怎麼設置 瀏覽:981
python獲取字元串編碼 瀏覽:102
java獲取當前系統時間 瀏覽:369
武漢有python培訓嗎 瀏覽:658
為什麼無法與伺服器建立數據鏈接 瀏覽:190
友價源碼2017 瀏覽:596
體溫偵測系統python 瀏覽:118
為什麼安卓系統佔用百分比 瀏覽:419
浪潮雲伺服器的組成部分 瀏覽:409
php100教程目錄 瀏覽:580
查看文件夾大小的命令 瀏覽:664
unixset命令 瀏覽:194
東北證券融e通app有什麼用 瀏覽:515
科大訊飛linux 瀏覽:466
三浪三副圖指標源碼 瀏覽:57
python中四捨五入355 瀏覽:357