我是一个网络新手...我有一个关于UDP通信的(愚蠢?:))问题。
我基于boost :: asio库创建了两个简单的程序:服务器和客户端。 这两个程序通过UDP套接字进行通信。客户端连接到服务器并开始传输数据报。
它在我的局域网中运行良好。我使用IP地址连接服务器(例如192.168.1.111)。
如果我的服务器应用程序在其他局域网中工作,客户端必须通过互联网连接怎么办?我如何联系服务器?
我所知道的只有可能的解决方案是:
有更好的解决方案吗?
某些应用程序(如Skype或LogMeIn ...)如何在没有VPN /端口转发的情况下工作,并且一个局域网中的用户可以访问其他局域网中的任何计算机?
答案 0 :(得分:2)
有更好的解决方案吗?
是
Skype使用Hole Punching trick。
A和B连接到服务器C
服务器C告诉B将虚拟UDP数据包发送到A(使用的IP和端口) 通过A for Skype连接)有效地打破了它自己的漏洞 (B的)防火墙
此数据包被A丢弃(它从NAT外部),但现在 A可以向B发送UDP数据包,让它们通过防火墙(B 路由器认为这是对[dummy]数据包的响应)
本文将详细介绍它: How-Skype-Co-get-round-firewalls