首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Socket 編程中 recv 返回值導致無法跳出循環的解決

     編輯:程式設計疑難解答

問題現象

使用 while(1) { if(recv(c, recvBuf, 1000, 0)) printf(...); else break; } 時,客戶端斷開連接後循環未退出。

原因分析

  • recv 返回 0 表示連接正常關閉(對方發送 FIN)。
  • recv 返回 -1 表示發生錯誤(如連接重置、網絡不可達)。
  • 代碼中 if(recv(...)) 將 -1 視為真值,導致進入 printf 而非 break。

正確寫法

int ret;
while ((ret = recv(c, recvBuf, 1000, 0)) > 0) {
    recvBuf[ret] = '\0'; // 確保字串結束
    printf("%s\n", recvBuf);
}
if (ret == 0) printf("連接正常關閉\n");
else perror("recv 錯誤");

關鍵點

必須顯式判斷返回值:>0 繼續,==0 正常退出,<0 錯誤處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved