Iphone 是否可以通过获取两个ios设备的IP地址来使用套接字连接它们?

Iphone 是否可以通过获取两个ios设备的IP地址来使用套接字连接它们?,iphone,objective-c,ios,xcode,network-programming,Iphone,Objective C,Ios,Xcode,Network Programming,我想通过套接字连接多个设备,而无需任何服务器实现。我将仅用于获取要注册的设备的IP地址。您可以使用。它的api可以帮助您 它可以用于非游戏应用。对等通信有两个主要问题:发现和可达性 首先,您需要知道其他对等方的IP地址才能连接到它们。一旦你连接到一个对等网络,他们都可以互相更新网络状态,互相推荐更好的对等网络,传递加入和离开的新对等网络的通知,等等。但是你必须设计和实现一种机制来交换这些信息。更重要的是,你需要以某种方式启动一些事情,因为当一个新的对等启动时,它就在一个只有它自己的网格中,并且它

我想通过套接字连接多个设备,而无需任何服务器实现。我将仅用于获取要注册的设备的IP地址。

您可以使用。它的api可以帮助您


它可以用于非游戏应用。

对等通信有两个主要问题:发现和可达性

首先,您需要知道其他对等方的IP地址才能连接到它们。一旦你连接到一个对等网络,他们都可以互相更新网络状态,互相推荐更好的对等网络,传递加入和离开的新对等网络的通知,等等。但是你必须设计和实现一种机制来交换这些信息。更重要的是,你需要以某种方式启动一些事情,因为当一个新的对等启动时,它就在一个只有它自己的网格中,并且它没有信息给自己

一种可能是让一些著名的“超级工程师”(你运行的)始终保持连接,并将他们的地址烘焙到应用程序中。或者您可以使用“介绍服务器”而不是对等服务器,提供大致相同的功能。或者你可以通过一些外部方式交易地址(最简单的方式是用户在网络论坛或IRC渠道上交易地址,或者亲自交易并手动输入地址),这些方式可以在不同程度上实现自动化。还有一些快捷方式可以帮助Bonjour让其他对等点进入网格,只要局域网上已有一个对等点;GameCenter/GameKit可用作自动外部交易网络;等等

一旦解决了发现问题,仍然存在可达性问题。大多数iOS设备通常没有可公开访问的IP地址;相反,无论是家庭WiFi路由器还是手机运营商的3G网络,他们都支持进行网络地址转换的路由器。这意味着你需要一些方法来打NAT洞,让两部iPhone互相通话。知道每个设备的公共地址和内部地址的人可以安排他们建立彼此的连接。您可以让普通同行这样做(尽管这会使jumpstart问题变得更严重),也可以让您的超级工程师/介绍服务器等这样做


如果您想自己构建所有这些,您可能需要查看其他实现。BitTorrent(包括trackers和DHT)在一系列级别上都得到了很好的理解和记录,从好奇的最终用户的“谎言到儿童”,到详细的协议规范和开源实现。再看看其他一些P2P网络,因为BitTorrent并不是完美的,它不会尝试做所有人想做的事情。

你不能。如果设备通过wifi全部在线,则可能需要依赖路由器设置,就像pc connect一样。如果某些设备使用3g或gprs协议连接,它们可能根本没有ip地址。

我一直在做类似的事情,这是一个巨大的麻烦。有3个考虑因素:1)可达性2)发现3)连接本身

1)不要考虑使用3G/4G,它不能很好地保持一个开放的套接字连接。

2) 我会在互联网上使用某种中介服务将两者连接起来。对于查找,您可以只列出服务上可用的设备


3) 对于连接,我发现IOS套接字库使用起来相当痛苦,但是如果你转到BSD套接字级别,就没有那么糟糕了。我认为使用zmq套接字会非常有趣;这可能会简化代理服务的编写。

也许您正在寻找的是Bonjour服务?不,要连接的设备将不在同一个网络上。它们将通过其三个g网络或网络提供商的gprs连接进行连接。您将需要一些发现机制。如果设备不在同一网络上,则需要某种服务器。如果这些设备是3G的,你甚至不能确定它们的IP是唯一的。配对api在互联网上工作吗?因为我想要某种可以通过互联网连接多个设备的机制。据我所知,Gamekit只能通过蓝牙或局域网连接设备。你混淆了两件事。GKSession是GameKit的对等部分,只能通过蓝牙或本地网络工作。GKMatchmaker确实在互联网上工作,但它不是点对点的:一切都通过苹果的服务器或你自己的服务器进行路由。通过一个定制服务器和一些工作,它可以作为一个真正的P2P网格的介绍人的一部分,但它本身并不能解决任何问题。这不是真的。GPRS和iOS设备使用的所有其他移动技术保证IP地址。(GPRS过去只允许X.25,但仅在过时的第一版中使用。)IP地址可能不可公开路由,但对于大多数WiFi网络也是如此,同样的NAT穿孔技术也可以工作。有关iOS上穿孔的更多信息,请参阅。有关iPhone的BitTorrent客户端Enhanced cTorrent的源代码,请参阅。如果您想要长期持久连接,还有一个问题:iPhone会一直更改地址。因此,您需要从一侧或另一侧检测,并可能重新打孔以重新建立连接。有些P2P协议考虑到了这一点(我相信Adobe的RTMFP考虑到了,但我不知道解释其工作原理的旧白皮书是否仍然可用),但大多数没有考虑到,因为它们是为桌面系统设计的。#1是一个很好的观点。当对等方更改地址时,您必须有一些应用程序级逻辑来传播地址更改(并重新穿孔)。这是可行的,但它确实意味着如果您想要可靠、有序、长期的连接,您必须在应用程序级别自己构建它们,而不是