我遇到了一个有趣的问题。基本上我有两部手机都在NAT之后。我想使用UDP直接在2台设备之间进行通信。
我知道如果我发起从电话到服务器的连接,那么我可以将数据推回到与电话的连接(即从接收消息的同一端口将其发回到与之相同的IP和端口从......收到)。所以我可以通过将两部手机连接到服务器来轻松地在两台设备之间进行通信。然后将数据发送到服务器并将其重新路由回电话。这绕过了我可能遇到的任何NAT遍历问题。
但是我宁愿只使用服务器将2台设备指向对方,然后让它们直接通信。我该怎么做呢?是否可以不使用像uPnP这样的东西?
任何帮助都会很有用!
编辑:我发现这个文档http://www.brynosaurus.com/pub/net/p2pnat/看起来像发夹翻译就是我所追求的但它看起来并没有被广泛支持。我想知道移动ISP对UPnP的支持有多好?
答案 0 :(得分:4)
您需要一个中介服务器,以便客户端可以知道它们的位置。然后一个通过uPNP打开一个服务器,另一个连接到它。
答案 1 :(得分:4)
您正在寻找的是UDP打孔,请参阅例如http://en.wikipedia.org/wiki/UDP_hole_punching
基本思路很简单,您告诉每个端点要使用的端口,并且它们开始发送udp数据包。 NAT'ing设备在看到第一个传出数据包时会设置一个遍历规则,然后另一端的下一次尝试将匹配此遍历规则。