UDP打孔:无法从服务器发送到客户端

Posted

技术标签:

【中文标题】UDP打孔:无法从服务器发送到客户端【英文标题】:UDP Hole-punching: cannot send from server to client 【发布时间】:2020-11-13 16:58:38 【问题描述】:

从服务器 A 开始(通过静态 IP 全局可访问),我将 UDP 套接字绑定到 0.0.0.0:25000。

然后在(住宅)NAT 后面使用客户端 A,我将 UDP 套接字绑定到 0.0.0.0:25000。然后客户端-A 向服务器-A 发送一个数据包。

Server-A 接收数据包。服务器-A 记录远程套接字 K,数据包从那里被 NAT'ed。服务器-A 向 K 发送数据包,目的是让 NAT 将数据包转发给客户端-A。

但是,客户端 A 没有收到数据包。在 NAT 上,当我在端口 25000 上为 UDP 启用端口触发时,它就可以工作了。但是,在制作 p2p 应用程序时,我宁愿避免要求客户端进入路由器设置以使程序运行。如何在防火墙上打一个洞,使通信是双向的?

【问题讨论】:

【参考方案1】:

如果您的路由器/NAT 设备支持 NAT-PMP 或 UPNP,那真的很容易。您只需要实现协议并打开特定端口即可使用。如果没有,那么您可能需要使用 ICE。

【讨论】:

以上是关于UDP打孔:无法从服务器发送到客户端的主要内容,如果未能解决你的问题,请参考以下文章

1个端口上的UDP打孔?

UDP打孔到期[关闭]

UDP打孔只能部分工作c#

Java TCP 打孔

Java UDP STUN 打孔与 DatagramSocket

boost::asio 中的 NAT 打孔