iPhone - 通过互联网的点对点连接

Posted

技术标签:

【中文标题】iPhone - 通过互联网的点对点连接【英文标题】:iPhone - Peer to Peer connection over the internet 【发布时间】:2011-12-14 15:09:50 【问题描述】:

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

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

您能否告诉我如何使用 p2p 套接字连接通过互联网连接两部 iPhone?

【问题讨论】:

【参考方案1】:

我对 NSNetService 了解不多,但它似乎只适用于本地网络。如果您想建立从 iphone 到另一个 iphone 的 p2p 连接,您的路由中总会遇到多个 NAT(网络地址转换器)的问题。如何找到对等点的地址和路由?以及如何通过所有的防火墙和 NAT?

我正在开发一个需要处理相同问题的应用程序,并且我已经回答了一个类似的问题,在此之前我会在这里引用:

其实是可以的。你可能想用谷歌搜索一个叫做 “UDP打孔”或“TCP打孔”。

简而言之,主要方法是:假设您有类似继电器的东西 服务器,即互联网中公开的一些服务器 可从连接到 www 的每个专用 LAN 寻址。不 您的两个客户端 A 和 B 在(不同的)私有 LAN 中, 一些网络地址转换 (NAT) 正在进行,想要 建立对等连接。

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

如果现在 A 想与 B 通信,它会向服务器寻求帮助。这 服务器将向 B 发送一条消息,表明 A 想与她通信 告诉她 A 的公私 IP 和端口。 A 取回 B 的公开信息 以及私人信息和端口。

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

谨防某些 NAT 扫描 IP 地址数据并进行转换 它们也是如此,但如果您加密数据或更改 地址(补充,...)你会没事的。

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

我希望这可以帮助一些解决此问题的人,尽管 帖子太旧了!

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

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于iPhone - 通过互联网的点对点连接的主要内容,如果未能解决你的问题,请参考以下文章

网络中的点对点到底是啥意思,啥原理啊?

在运行时使用 WCF 进行 NAT 遍历的点对点

iPhone通过wifi点对点?

如何在 2 个无线 linux 设备之间设置安全的点对点通信?

在像 bittorrent 这样的点对点协议的情况下,NAT 遍历是如何工作的。

在像 bittorrent 这样的点对点协议的情况下,NAT 遍历是如何工作的。