1

我编写了一个应用程序,其中必须将客户端直接相互连接并保持连接。在使用高级技术(谷歌)进行一些研究后,我发现我需要的可以通过 NAT-Punching 或 NAT-Traversal 来实现。

大多数人似乎通过 UDP 使用 NAT-Punching,但在我的情况下,我需要使用 TCP 来执行此操作(这是事实,在有人问“为什么不使用 UDP?”之前)并且我找不到任何示例代码这个或至少是一个适当的教程。我所能找到的只是理论上的附件,但没有 Sockets 或 TCPClients(我更喜欢套接字。)。

有人可以链接我一些示例代码,我可以使用这些示例代码连接 NAT 后面的两个客户端,或者将我链接到带有示例代码的完整教程吗?我知道这个目标在 .NET 中很难实现(我使用的是 VB.NET,但我也能够阅读和理解 C#),但它应该是可能的。

UPnP 不是一个选项,因为一些 NAT 出于安全原因将其停用。

4

1 回答 1

1

除非您可以访问原始套接字,否则无法通过 TCP 完成 NAT 穿孔。您需要对序列号和 TTL 值进行一些技巧和操作才能使其正常工作。但是,在 Windows 中,由于滥用原始套接字传播或执行 DDoS 的恶意软件数量庞大,在 XP SP2 之后的所有 Windows 版本上的非服务器版本的操作系统上都不允许使用原始套接字。

您执行以下操作之一:

  1. 使用 UDP,输入代码以重新请求丢失的数据包或重构代码以处理丢失的数据包(如果可以接受的话)。
  2. 使用服务器作为中间人进行流式传输
  3. 其中一个末端必须能够制作原始插座。
于 2012-08-06T15:20:44.347 回答