12

我遇到了一个有趣的问题。基本上我有 2 部手机都在 NAT 之后。我想使用 UDP 在两个设备之间直接通信。

我知道如果我启动从手机到服务器的连接,那么我可以将该连接向下推送到手机(即从接收消息的同一端口将其发送回与接收消息的同一 IP 和端口) . 因此,我可以通过将两部手机连接到服务器来轻松地在两部设备之间进行通信。然后将数据发送到服务器并将其重新路由回手机。这绕过了我可能遇到的任何 NAT 穿越问题。

但是,我宁愿只使用服务器将 2 个设备相互指向,然后让它们直接通信。我该怎么做呢?是否可以不使用像 uPnP 这样的东西?

任何帮助将不胜感激!

编辑:我发现这个文件http://www.brynosaurus.com/pub/net/p2pnat/看起来发夹式翻译是我所追求的,但它看起来并没有得到广泛的支持。我想知道移动 ISP 对 UPnP 的支持有多好?

4

2 回答 2

4

你需要一个中介服务器,这样客户端就可以知道他们在哪里。然后一个通过 uPNP 打开一个服务器,另一个连接到它。

于 2011-02-22T11:55:52.487 回答
4

您正在寻找的是 UDP 打孔,参见例如http://en.wikipedia.org/wiki/UDP_hole_punching

基本思想很简单,你告诉每个端点要使用的端口,然后它们开始发送 udp 数据包。NAT'ing 设备在看到第一个传出数据包时会设置一条穿越规则,然后另一端的下一次尝试将匹配该穿越规则。

于 2011-02-22T11:56:58.227 回答