我現在正在編寫的應用程序有這個問題。.NET套接字或端口轉發問題?
我使用Sockets .NET編寫服務器和客戶端應用程序。服務器在靜態IP爲192.168.1.6的計算機上運行。客戶端通過LAN連接到該IP地址沒有問題。但是,當我設置客戶端連接到我的WAN IP時,無法建立連接。
當然我立即想到了端口轉發,所以我配置了我的路由器來接受我用於應用程序和機器靜態IP的端口上的傳入連接。我甚至檢查過portforward.com是否使用PFPortChecker工具正確轉發了這個端口(而且是這樣),但我似乎無法使其工作。
我在這裏忽略了什麼嗎? 我真的希望有人能幫助我,因爲我現在硬是拉了我最後的頭髮...
編輯:
好吧,我已經縮小問題降低到.NET的Socket問題。
基本上當我嘗試用下面的代碼(C#)連接:
Socket _client;
_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_client.Connect("XX.XXX.XXX.X", XXXX);
連接只能局域網環境內進行。然而,當我在我的機器上運行服務器的實例時,我嘗試使用PFPortChecker工具ping WAN IP和端口,實際上我在服務器中得到響應,並開始將傳入連接處理爲新客戶。
任何想法如何我可以修復我的代碼,使連接可以通過廣域網?
編輯2:
好的,所以我找出了問題所在。我無法從我自己的WAN IP連接到我自己的WAN IP。在另一個網絡上,我沒有任何問題連接到我的服務器。
無論如何感謝您的麻煩。
也不會傷害在客戶端上運行Wireshark來檢查請求是否轉到WAN地址。 – HABO
我運行wireshark,使用過濾器tcp.port == XXXX(其中XXXX是我使用的端口),但沒有出現。我曾經在某處讀過一個應用程序無法連接到它自己的WAN地址的地方。這是真的,還是有另一個原因,我沒有得到任何包?編輯:開始在客戶端wireshark,讓我們看看是否給了我什麼使用... –
你想從同一臺機器做到這一點?這使得它更混亂,但並非不可能。如果您的公網IP爲1.2.3.4,並且您嘗試連接到1.2.3.4,則數據包應該熄滅,打到WAN端的路由器,誰將轉向並將其發送回192.168.1.6 –