2012-08-23 64 views
0

我現在正在編寫的應用程序有這個問題。.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。在另一個網絡上,我沒有任何問題連接到我的服務器。

無論如何感謝您的麻煩。

回答

3

我會首先推薦在服務器上運行Wireshark,看他是否正在看到傳入的連接。這將確認路由器是否將該端口上的流量轉發到機器。

+0

也不會傷害在客戶端上運行Wireshark來檢查請求是否轉到WAN地址。 – HABO

+0

我運行wireshark,使用過濾器tcp.port == XXXX(其中XXXX是我使用的端口),但沒有出現。我曾經在某處讀過一個應用程序無法連接到它自己的WAN地址的地方。這是真的,還是有另一個原因,我沒有得到任何包?編輯:開始在客戶端wireshark,讓我們看看是否給了我什麼使用... –

+0

你想從同一臺機器做到這一點?這使得它更混亂,但並非不可能。如果您的公網IP爲1.2.3.4,並且您嘗試連接到1.2.3.4,則數據包應該熄滅,打到WAN端的路由器,誰將轉向並將其發送回192.168.1.6 –

0

192.168.1.6是一個局域網子網...你的外部IP是不同的。如果端口轉發比這可能是問題。谷歌「我的ip是什麼」,它應該告訴你你的外部IP地址

+0

我認爲OP知道這一點。 –

+0

不是一個小傢伙什麼的,但那些不知道局域網IP和廣域網IP之間區別的人不應該插手Socket編程。 –