通过互联网发送UDP数据报

时间:2014-03-13 23:42:56

标签: c++ sockets networking udp skype

我是一个网络新手...我有一个关于UDP通信的(愚蠢?:))问题。

我基于boost :: asio库创建了两个简单的程序:服务器和客户端。 这两个程序通过UDP套接字进行通信。客户端连接到服务器并开始传输数据报。

它在我的局域网中运行良好。我使用IP地址连接服务器(例如192.168.1.111)。

如果我的服务器应用程序在其他局域网中工作,客户端必须通过互联网连接怎么办?我如何联系服务器?

我所知道的只有可能的解决方案是:

  • 端口转发(不安全?)
  • VPN(过于复杂)

有更好的解决方案吗?

某些应用程序(如Skype或LogMeIn ...)如何在没有VPN /端口转发的情况下工作,并且一个局域网中的用户可以访问其他局域网中的任何计算机?

1 个答案:

答案 0 :(得分:2)

  

有更好的解决方案吗?

Skype使用Hole Punching trick

假设A想要联系B:

  • 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