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

Ani*_*pta 15 iphone xcode network-programming objective-c ios

我想通过套接字连接多个设备而不需要任何服务器实现.我将仅使用它来获取将要注册的设备的IP地址.

aba*_*ert 9

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

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

一种可能性是让一些着名的"超级同伴"(你运行)始终连接,并将他们的地址烘焙到应用程序中.或者你可以拥有"引入服务器"而不是同行,提供相同的功能.或者您可以使用一些外部交易地址方式(最简单的是用户在网络论坛或IRC频道上进行交易或亲自交易并手动输入),这可以自动化到不同程度.还有一些快捷方式可以帮助 - 只要局域网上有一个对等方已经存在,Bonjour就可以让其他对等方进入网状网.GameCenter/GameKit可用作自动外部交易网络; 等等

一旦解决了发现问题,您仍然会遇到可达性问题.大多数iOS设备通常没有可公开访问的IP地址; 相反,它们是支持网络地址转换的路由器,无论它们是家庭WiFi路由器还是运营商的3G网络.这意味着您需要一些方法来进行NAT打孔以使两个iPhone相互通信.知道每个设备的公共地址和内部地址的人可以安排他们建立彼此的连接.你可以让普通的同伴做这件事(虽然这会使Jumpstart问题更大)或者你的超级同事/介绍服务器/等.做到这一点.

如果您想自己构建所有这些,您可能希望查看其他实现.BitTorrent(包括跟踪器和DHT)是一个很好理解和记录的连续级别,从好奇的最终用户的"谎言到孩子"到详细的协议规范和开源实现.然后看看其他一些P2P网络,因为BitTorrent并不完美,并没有尝试做每个人都想到的一切.


Mac*_*Teo 5

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

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

  • 你混淆了两件事。GKSession 是 GameKit 的点对点部分,仅适用于蓝牙或本地网络。GKMatchmaker 确实可以通过互联网工作,但它不是点对点的:一切都通过 Apple 的服务器或您自己的服务器进行路由。通过自定义服务器和一些工作,它可以用作真正 P2P 网格的介绍器的一部分,但它本身并不能解决问题。 (3认同)