5

我用 C# 制作了一个服务器/客户端应用程序。

我的问题如下:假设客户端位于 NAT(如路由器)后面并尝试连接到服务器。从服务器的角度来看,服务器只知道客户端的外部 IP 地址。您如何准确确定将数据包发送到哪台计算机位于 NAT 后面?我了解客户端路由器的端口转发是解决此类问题的常用方法,但如果您查看 Skype 等应用程序,则无需端口转发即可在服务器与 NAT 后面的许多客户端之间正确建立连接. 反之亦然,也可以问这个问题(即:NAT 后面的客户端到服务器)。

我对套接字编程很陌生,所以我很想听听我可以阅读以完全理解这些东西的任何指南或材料。

4

1 回答 1

3

您不必担心应用层中的 NAT。如果您收到一条 IP 为 200.51.255.79 的消息,您可以将答案发送到同一个 IP。路由器将自动处理 NAT 和进一步的路由。当然,端口转发不是这样,但 NAT 是这样。

Skype 以一种非常有趣的方式工作,使用服务器端的当前 ips 和端口数据库绕过端口转发和防火墙,每个用户都在等待响应。您应该在互联网上查找完整的解释。这是一个非常好的阅读=)。

于 2012-10-24T03:17:59.287 回答