gpt4 book ai didi

c# - 使用 C# 在 NAT 后面实现点对点

转载 作者:行者123 更新时间:2023-11-30 15:43:36 26 4
gpt4 key购买 nike

我有一个一般性问题,可能已在此处某处得到解答,但使用搜索效率不高。所以,我会重新提问,如果有相关主题,请指出我的位置。谢谢。

所以,总体思路是:我们有两个 .NET 编写的客户端,它们希望在不通过服务器路由整个流量的情况下相互交谈。更重要的是,没有必要让两个客户端都基于 .NET,但在任何情况下都会有一个(另一个可以是 Objective-C、Unix 上的 C++ 等)。

思路是:

  1. 第一个客户端建立与某个服务器的连接,因此 NAT 记住客户端位于地址 10.0.0.1:1234,服务器位于地址 70.0.0.7:4567。因此,当 70.0.0.7 将数据包发送回 NAT 时,NAT 将知道如何将其伪装成客户端。
  2. 第二个客户端建立到同一服务器的连接,因此第二个 NAT 还记得地址为 192.168.0.1:19234 的内部客户端连接到地址为 70.0.0.7:7654 的服务器,并且也能够接受返回的数据包192.168.0.1:19234
  3. 现在我们需要建立从 10.0.0.1:1234 到 192.168.0.1:19234 的连接。

两个 c# 客户端都可以知道彼此的端点(假设服务器保留 NATted 地址,它们是:Client1 - 111.0.0.1:1111 和 Client2 - 222.0.0.2:2222)。必要的是 - 客户端 1 无需调用 Socket.Connect 即可直接将数据包发送到 222.0.0.2:2222,客户端 2 也无需调用 Socket.Connect 即可将数据包发送到 111.0.0.1:1111。

这是否可以只使用 .NET 而不使用任何特殊的库,只使用标准套接字等?

最佳答案

听起来您想做类似于 UDP hole punching 的事情

关于c# - 使用 C# 在 NAT 后面实现点对点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6676090/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com