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

C# Socket 客戶端連接非本機服務器失敗:公網 IP、端口映射與防火牆完整排查清單

     編輯:程式設計疑難解答

現象

  • 本機 127.0.0.1 連接正常;
  • 換成路由器分配的內網 IP(或公網 IP)客戶端連不上;
  • 單機雙進程測試。

核心原因排查清單

  1. 服務端綁定地址:IPAddress.Any (0.0.0.0) 監聽所有網卡,**不能**綁定 127.0.0.1 或具體內網 IP;
  2. 防火牆入站規則:Windows 防火牆/第三方安全軟體需放行服務端監聽端口(TCP);
  3. 路由器端口映射(跨公網時):外網 IP:Port → 內網服務器 IP:Port,且 ISP 未封鎖該端口;
  4. 雙邊 IP 版本一致:雙方均為 IPv4 或均為 IPv6,避免 IPv6 回環導致連不上;
  5. 客戶端連接目標:同一局域網用內網 IP,跨公網用公網 IP + 映射端口。

服務端正確綁定示例

var listener = new TcpListener(IPAddress.Any, 8888); // 監聽所有介面
listener.Start();
// 或 Socket 寫法
var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Bind(new IPEndPoint(IPAddress.Any, 8888));
socket.Listen(100);

快速驗證步驟

  1. 服務端啟動後,本機 CMD 執行 netstat -an | findstr 8888,確認 0.0.0.0:8888 LISTENING;
  2. 同局域網另一台機器 telnet 服務端內網IP 8888,能連通說明代碼無誤,問題在防火牆/映射;
  3. 排除法:關閉防火牆測試 → 開啟防火牆加規則 → 配置路由器映射 → 測試公網連接。

附:完整服務端骨架(含線程池、異步、優雅關閉)

// 參考原始代碼,核心修正:Bind(IPAddress.Any) + 防火牆放行
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved