通过WAN将UDP从iPhone发送到iPhone

时间:2014-07-26 18:55:12

标签: ios sockets udp nat

在我最近的应用程序中,我设法通过本地网络(WiFi)中的UDP将数据(主要是音频)发送到其他iPhone。现在我需要在广域网中这样做。你们能指点我正确的方向从哪里开始?我需要做些什么?

我正在使用GCDAsyncSocket来管理套接字。我相信我必须得到服务器,我可以保留两个设备的IP地址。

另外,如何连接到NAT /防火墙后面的设备?我猜,我需要有公共IP地址(例如从http://checkip.dyndns.com/报废)。然后我需要traceroute吗?还是NSLookup?还是搭载?或者我需要使用UDP打孔?

我知道这是一个很大的问题,但如果你能指出我正确的技术,我将非常感激。

1 个答案:

答案 0 :(得分:0)

要在NAT后面的两个参与者之间进行通信,您可以像你提到的那样使用Hole-Punching。这里解释得很清楚:http://en.wikipedia.org/wiki/UDP_hole_punching#Flow

基本上,具有公共IP和端口的服务器用于共享iPhone的端口号。 但是NAT可以为iPhone与之交谈的每个不同的IP使用不同的端口。因此,如果iPhone1向服务器发送数据,则NAT使用端口X,但如果iPhone1想要将数据发送到不同的IP,则NAT可以选择端口Y.(参见http://en.wikipedia.org/wiki/Network_address_translation#Symmetric_NAT

为了克服这个问题,有一个名为UPnP的协议和鲜为人知的NAT Port Mapping Protocol。 我不熟悉UPnP,但也许其他人可以提供一些信息。

协议NAT-PMP使您可以动态请求将外部端口转发到您的设备。请参阅http://en.wikipedia.org/wiki/NAT_Port_Mapping_ProtocolRFC 6886。 这允许您“预测”您的外部端口并通过NAT建立连接。