C# 使用C语言在NATs后面实现对等#

C# 使用C语言在NATs后面实现对等#,c#,.net,p2p,C#,.net,P2p,我有一个一般性的问题可能在这里的某个地方得到了回答,但使用搜索并不是很有效。所以,我会重新提问,如果有关于这个的线索,请告诉我。谢谢 因此,总体思路是: 我们有两个.NET编写的客户端,它们希望在不通过服务器路由整个流量的情况下彼此通信。更重要的是,两个客户端都不必是.NET,但是在任何情况下都是(另一个可以是Obje-C,C++在UNIX等)。 这个想法是: 第一个客户端建立与某个服务器的连接,以便NAT记住客户端位于地址10.0.0.1:1234,服务器位于地址70.0.0.7:4567。因

我有一个一般性的问题可能在这里的某个地方得到了回答,但使用搜索并不是很有效。所以,我会重新提问,如果有关于这个的线索,请告诉我。谢谢

因此,总体思路是: 我们有两个.NET编写的客户端,它们希望在不通过服务器路由整个流量的情况下彼此通信。更重要的是,两个客户端都不必是.NET,但是在任何情况下都是(另一个可以是Obje-C,C++在UNIX等)。 这个想法是:

  • 第一个客户端建立与某个服务器的连接,以便NAT记住客户端位于地址10.0.0.1:1234,服务器位于地址70.0.0.7:4567。因此,当70.0.0.7将数据包发送回NAT时,NAT将知道如何将其伪装到客户端
  • 第二个客户端建立到同一服务器的连接,因此第二个NAT还记得地址192.168.0.1:19234上的内部客户端连接到地址70.0.0.7:7654上的服务器,并且还能够接受192.168.0.1:19234的数据包
  • 现在我们需要建立从10.0.0.1:1234到192.168.0.1:19234的连接
  • 两个c#客户端都可以知道彼此的端点(假设服务器保留NATted地址,它们是:Client1-111.0.0.1:1111和Client2-222.0.0.2:2222)。 必要的是-对于Client1,不需要调用套接字即可将数据包直接发送到222.0.0.2:2222。首先连接,对于Client2,不需要调用套接字即可将数据包发送到111.0.0.1:1111。同时连接


    仅使用.NET而不使用任何特殊的库(仅使用标准套接字等)是否可以做到这一点?

    听起来你想做类似的事情,或者

    为什么不想调用Socket.Connect?@Tony TheTiger:因为防火墙不允许连接。NAT具有伪装记录10.0.0.1:1234 111.0.0.1:1111,但无法接受套接字。请连接到111.0.0.1:1111否。我想要TCP连接,而不是UDP连接。我发现最相似的是:,但我需要知道它是否能在.NET中工作。或者,可能是这样,但在.NET中如何做到这一点呢?因此,环顾四周,我们并没有找到我们想要的东西,但找到了足够的东西,有可能开始在一些库上编写我们自己的.NET包装器。实际上,在了解了术语“NAT遍历”之后,我找到了另一篇关于这方面的StackOverflow文章。但是它也没有提供关于如何在.NET中实现它的好的指导方针。我从一位同事那里以同样的方式承认了这个术语:)