Tag: 打孔

UDP打孔。 让服务器与客户交谈

我一直在阅读很多关于如何实现UDP打孔的内容但是出于某些原因我无法使其工作。 对于那些不熟悉udp打孔的人来说,这是我自己的定义: 目标是能够在服务器的帮助下在两个客户端(客户端A和客户端B)之间传输数据。 因此客户端A连接到服务器并发送其信息。 客户B也这样做。 服务器具有必要的信息,以便客户端A能够向客户端B发送数据,反之亦然。 因此,服务器将该信息提供给两个客户端。 一旦两个客户端都有关于彼此的信息,就可以在没有服务器帮助的情况下开始在这些客户端之间发送和接收数据。 我的目标是能够做我刚才描述的(udp打孔)。 在此之前,我认为能够从服务器连接到客户端会很有帮助 。 为此,我计划向服务器发送有关客户端的信息。 一旦服务器收到该信息尝试从头开始连接到客户端。 一旦我能够执行,我应该拥有开始实现真正的udp打孔所需的一切。 以下是我设置的方法: 顶级路由器的服务器和底部路由器连接到LAN端口。 底部路由器(NAT)通过其WAN端口连接到顶级路由器。 客户端计算机连接到底部路由器到其中一个LAN端口。 因此,在该连接中,客户端能够看到服务器,但服务器无法看到客户端。 所以我在伪代码中完成的算法是: 客户端连接到服务器。 客户端将一些UDP包发送到服务器,以便在NAT上打开一些端口 将信息发送到客户端正在侦听的端口上的服务器。 一旦服务器收到该信息尝试从头开始连接到客户端。 这是代码中的实现: 服务器: static void Main() { /* Part 1 receive data from client */ UdpClient listener = new UdpClient(11000); IPEndPoint groupEP = new IPEndPoint(IPAddress.Any, 11000); string received_data; byte[] receive_byte_array = listener.Receive(ref […]