2012-10-24 47 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