iPhone - 通过互联网进行点对点连接

时间:2011-12-14 15:09:50

标签: iphone sockets p2p nsstream gcdasyncsocket

我正在构建一个使用与Web服务器的异步套接字连接的应用程序。 为了发送大量数据,我想使用异步套接字将两个iPhone连接到对等连接。我对GCDAsyncSocket比对iOS SDK套接字API更熟悉。

我做了类似的事情,但只有在本地网络中,我才会使用NSNetService发布状态并从p2p连接中获取所需的地址。

你能否告诉我如何使用p2p套接字连接在互联网上连接两部iPhone?

2 个答案:

答案 0 :(得分:2)

我对NSNetService知之甚少,但它似乎只适用于本地网络。如果您想建立从iphone到另一个的p2p连接,您的路由中将始终存在多个NAT(网络地址转换器)的问题。如何找到同行的地址和路线?以及如何通过所有防火墙和NAT?

我正在开发一个需要处理相同问题的应用,我已经回答了类似的问题,我将在此引用:

  

实际上,这是可能的。你可能想谷歌的东西叫做   “UDP打孔”或“TCP打孔”。

     

主要方法简而言之:假设你有像继电器这样的东西   服务器,即公共互联网中的某些服务器   可以从连接到www的每个专用LAN寻址。没有   你有两个客户端A和B在(不同的)私人局域网中   一些网络地址转换(NAT)正在进行,想要   建立点对点连接。

     

首先,两者都会告诉服务器他们的IP地址和端口   他们有自己的局域网。在UDP或TCP数据包中,服务器将   找到设备的公共地址和端口(或NAT(路由器))。   所以服务器知道私有和公共IP地址以及   港口。

     

如果现在A想要与B通信,它会要求服务器寻求帮助。该   服务器将向A发送消息,A想要与她通信   告诉她A的公共和私人IP和端口。 A取回B的公众   和私人信息和港口。

     

现在这里是魔术发生的地方。两个客户端现在都发送数据包   与私人和公众同时建立联系   另一方的地址,从而在他们的NAT中打了一个整体   这样就不会阻止传入的连接。即使一个   派对建立数据包的连接将在此之前到达   创建,其他的数据包将通过这样的a   可以创建连接。

     

请注意扫描数据以寻找IP地址并进行翻译的一些NAT   它们也是如此,但如果您加密数据或更改外观   地址(补充,......)你会没事的。

     

现在主要问题,服务器如何与其中一个进行通信   没有活动连接的客户端。那么在这种情况下你可以   使用“连接反转”和苹果的“推送通知”。使用   “推送通知”(pn)告诉NAT后面的客户端有   感兴趣的东西,它应该联系服务器。   完成后,连接处于活动状态,可以在连接中使用   以前描述的时尚。

     

我希望这可以帮助一些人解决这个问题,尽管如此   帖子很老了!

现在,如果您发现此解决方案有用并尝试实现它,请告诉我您是否成功获取服务器端的服务器 - 客户端连接的公共IP和端口。您也可以回答my question about this on stackoverflow

答案 1 :(得分:0)

请具体说明,您可以使用GCDAsyncSocket连接2部手机,您可以使用Github的示例代码。