3

我已经在网上阅读了大量关于此的问题,但似乎无法找到可靠的答案。如果我的 iPhone 在蜂窝数据上运行,而另一个 iOS 设备在 wifi 上运行(在两个不同的位置),它们是否可以直接相互发送数据而不先将其发送到 Web 服务器,然后再检索它?是从服务器/Apple 的 iCloud 发送和接收的唯一选项吗?如果我知道设备的 IP 地址怎么办?请注意,iPhone 已禁用 WiFi。

我不想把它放在应用商店里,它是供个人使用的。我知道NSNotificationCenter这不是一个选择。

4

4 回答 4

6

使用 gamekit 框架,您可以在两个 iOS 设备之间发送数据。它很容易实现。除此之外,我认为没有其他方式可以在两个 iOS 设备之间发送数据。

于 2012-07-09T17:52:12.187 回答
3

实际上,这是可能的。您可能想在谷歌上搜索称为“UDP 打孔”或“TCP 打孔”的东西。

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

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

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

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

当心一些 NAT 扫描 IP 地址数据并转换它们,但如果您加密数据或更改地址的外观(补码,...),您会没事的。

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

我希望这可以帮助一些解决这个问题的人,尽管这篇文章已经很老了!

于 2013-10-10T13:35:22.693 回答
1

如果 IP 地址是可通过 Internet 访问的可公开访问的 IP 地址,并且它们是静态的(足够),那么您只能使用直接 IP 地址通信,这样当设备被动态分配到地址时,它们不会定期更改。在许多(大多数)情况下,情况并非如此,因为您的设备将被动态分配其 IP 地址,而这些地址通常是不可公开寻址的自分配 IP 地址。

正如其他人所评论的那样,使用像 iCloud 这样的 Apple 提供的机制可能是最简单的选择。如果这不是您想要娱乐的东西,可能有一些方法可以利用动态 DNS 服务(如 DynDNS)来管理您设备的实际 IP 地址。有了类似的东西,您也许可以基于命名 DNS 查找在设备之间使用直接 IP 连接。不过,您可能必须跳过一些障碍才能做到这一点,但我不确定您是否想达到那个程度。

于 2012-07-09T21:19:06.383 回答
0

我认为 蓝牙对你来说是个不错的选择

于 2012-07-09T16:02:06.920 回答