可以在两个iOS设备之间发送数据吗?

时间:2012-07-09 15:57:46

标签: iphone objective-c icloud nsnotificationcenter

我在网上看到了很多关于这个的问题,似乎找不到可靠的答案。如果我有一个在蜂窝数据上运行的iPhone和另一个在wifi上的iOS设备(在两个不同的位置),他们是否有可能直接向对方发送数据而不先将其发送到Web服务器,然后检索它?是否是从服务器/ Apple的iCloud发送和接收的唯一选项?如果我知道设备的IP地址怎么办?请注意,iPhone已禁用WiFi。

我不打算将它放在应用程序商店中,它是供个人使用的。我知道NSNotificationCenter不是一种选择。

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

实际上,这是可能的。您可能想要谷歌搜索“UDP打孔”或“TCP打孔”。

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

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

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

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

请注意扫描数据以查找IP地址并转换它们的一些NAT,但如果您加密数据或更改地址的外观(补充,...),您将没事。

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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