2012-10-24 43 views
4

我在C#中創建了一個服務器/客戶端應用程序。服務器連接到NAT後面的客戶端

我的問題如下:假設客戶端位於NAT(如路由器)後面並嘗試連接到服務器。從服務器的角度來看,服務器只知道客戶端的外部IP地址。你如何確定哪個計算機發送數據包到NAT後面?我知道從客戶端的路由器端口轉發是解決這類問題的常用方法,但是如果您查看諸如Skype的應用程序,則無需端口轉發即可正確建立服務器與NAT背後的許多客戶端之間的連接。反過來也可以提出這個問題(I.E:客戶端到服務器後面的NAT)。

我在套接字編程方面很新穎,所以我很樂意聽到任何我可以閱讀的指南或材料來完全理解這些東西。

+1

http://www.cisco.com/en/US/tech/tk648/tk361/technologies_tech_note09186a0080094831.shtml –

+0

檢出SignalR。它使這很容易。 –

+0

關於點對點應用程序(Skype&Friends)如何通過'NAT'路由器建立連接,甚至可以通過谷歌的'UDP Hole Punching'和/或'STUN'建立連接。 – alk

回答

2

您不應該擔心應用程序層中的NAT。如果您收到IP爲200.51.255.79的消息,則可以將答案發送給相同的IP。路由器將處理NAT並自動進一步路由。當然不是這樣的端口轉發,而是使用NAT。

Skype以非常有趣的方式使用當前ips和端口的服務器端數據庫來避開端口轉發和防火牆,其中每個用戶都在等待響應。你應該在互聯網上查看完整的解釋。這是一個非常好的閱讀=)。

+0

讓某人開始的鏈接會很棒! – ThunderGr