我在C#中创建了一个服务器/客户端应用程序。
我的问题如下:假设客户端在NAT(如路由器)后面并试图连接到服务器。从服务器的角度来看,服务器只知道客户端的外部IP地址。您如何确定将数据包发送到NAT后面的确切计算机?我理解客户端路由器的端口转发是解决这类问题的常用方法但是如果你看一下像Skype这样的应用程序,没有必要端口转发来正确建立服务器和NAT背后的许多客户端之间的连接。这个问题也可以反过来(I.E:客户端到NAT后的服务器)。
我对套接字编程很陌生,所以我很乐意听到任何我可以阅读的指南或材料,以便完全理解这些内容。
答案 0 :(得分:3)
您不应该担心应用程序层中的NAT。如果您收到IP为200.51.255.79的消息,则可以将答案发送到同一IP。路由器将自动处理NAT并进一步路由。当然不是这样的端口转发,而是NAT。
Skype以一种非常有趣的方式使用当前ips和端口的服务器端数据库绕过端口转发和防火墙,每个用户都在等待响应。你应该在互联网上查看完整的解释。这是一个非常好的阅读=)。