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



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

点对点通信有两个主要问题:发现和可访问性。

首先,您需要知道其他对等方的 IP 地址才能连接到它们。一旦你连接到一个对等方网格,它们都可以让彼此了解网络状态的最新情况,互相建议更好的对等方,传递加入和离开的新对等方的通知,等等。但是你必须设计和实施一种交易该信息的机制。更重要的是,你需要以某种方式快速启动事物,因为当一个新的对等体启动时,它只是在自己的网格中,它没有信息可以给自己。

一种可能性是让一些众所周知的"超级对等体"(您运行)始终保持连接,并将其地址烘焙到应用程序中。或者你可以使用"介绍服务器"而不是对等服务器,提供大致相同的功能。或者你可以有一些外部的交易地址方式(最简单的是用户在网络论坛或IRC频道上交易它们,或者亲自交易并手动输入),这可以在不同程度上自动化。还有一些快捷方式可以提供帮助 - 只要 LAN 上的一个对等体已经存在,Bonjour 就可以将其他对等体放到网格上;GameCenter/GameKit可以用作自动外部交易网络;等。

解决发现问题后,仍然存在可访问性问题。大多数 iOS 设备通常没有可公开访问的 IP 地址;相反,他们落后于进行网络地址转换的路由器,无论是家庭WiFi路由器还是蜂窝运营商的3G网络。这意味着您需要某种方法来进行NAT打孔以使两部iPhone相互通信。知道每个设备的公共地址和内部地址的人可以安排他们相互建立连接。你可以让普通的对等方这样做(尽管这使得快速启动问题更大),或者让你的超级对等方/介绍服务器/等来做。

如果你想自己构建所有这些,你可能想看看其他实现。BitTorrent(包括跟踪器和DHT)在从好奇的最终用户的"谎言到儿童"到详细的协议规范和开源实现的连续级别上得到了很好的理解和记录。然后看看其他一些P2P网络,因为BitTorrent并不完美,并且不会尝试做每个人都想出的所有事情。

您可以使用GameKit。它具有可以帮助您的匹配 API。

它可用于非游戏应用程序。

我一直在做类似的事情,这是一个巨大的痛苦。有 3 个注意事项:1) 可访问性 2) 发现 3) 连接本身。

1)甚至不要考虑使用3G/4g,它只是不适合保持开放的插座连接。

2)我会在互联网上使用两者之间的某种经纪人服务来连接两者。对于发现,只需列出服务上可用的设备。

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

你不能。如果设备全部在线,则可能并依赖于路由器设置,就像PC连接一样。如果某些设备与 3g 或 gprs 协议连接,它们可能根本没有 IP 地址。

相关内容

最新更新