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

C++ Socket 跨機通訊失敗:本機正常、局域網不通的排查清單

     編輯:程式設計綜合問答

現象

同機器 127.0.0.1 或本機 IP 連接成功,換兩台機器局域網連接失敗(connect 返回 -1)。

排查清單(按概率排序)

  1. 防火牆:Windows 防火牆/第三方安全軟件攔截入站 8888/6666 端口。
    → netsh advfirewall firewall add rule name="AllowSocket" dir=in action=allow protocol=TCP localport=8888 或圖形界面放行。
  2. 綁定地址:服務端 bind(INADDR_ANY) 正確,但客戶端連接目標 IP 錯誤(需用服務端真實局域網 IP,而非 127.0.0.1)。
  3. 網絡隔離:雙機不在同一網段、VLAN 隔離、AP 隔離(無線路由器開啟 AP 隔離導致無線設備互不通)。
  4. 端口衝突/被佔用:服務端啟動前檢查 netstat -an | findstr 6666。
  5. 代碼邏輯 Bug:
    • 服務端 listen 後只 accept 一次,處理完即退出循環(示例代碼 while(true) 在 accept 之後,實際只能服務一個客戶端)。
    • 客戶端 send/recv 缺乏錯誤重試、粘包處理。
  6. 殺毒軟件/EDR:攔截可疑網絡行為,嘗試將編譯輸出目錄加入白名單。

調試工具推薦

  • Wireshark / Microsoft Network Monitor:抓包確認 SYN 是否到達、是否有 RST/無響應。
  • tcping / telnet:tcping 192.168.x.x 6666 快速驗證端口通達性。
  • netsh trace:Windows 內建網絡追蹤,無需安裝第三方。

代碼級建議

  • 服務端採用 IOCP / select / epoll(Linux) 實現並發,單線程 accept 循環僅適合測試。
  • 應用層協議定義幂長度前綴或分隔符,解決 TCP 粘包/拆包。
  • 加入心跳機制檢測死連接。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved