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

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

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

首先,您需要知道其他节点的IP地址才能连接到它们。 一旦你连接到一个对等networking,他们可以互相保持对方的networking状态更新,build议彼此更好的同龄人,通过已经join和离开的新同事的通知等等。但是你有devise和实施交易信息的机制。 更重要的是,你需要以某种方式启动事物,因为当一个新的对等点启动时,它就在自己的网格中,并且没有任何信息可以给予它自己。

一种可能性是拥有一些始终连接的知名“超级用户”(即你运行的),并将他们的地址烘焙到应用程序中。 或者你可以有“介绍服务器”,而不是同行,服务相同的function。 或者你可以有一些交易地址的外部方式(最简单的是用户在networking论坛或者IRC频道上交易,或者亲自手工input),这些方式可以在不同程度上自动化。 也有快捷方式可以帮助 – 只要局域网上的一个对等设备已经在那里,Bonjour可以让其他对等设备进入网状networking; GameCenter / GameKit可以用作自动化的外部交易networking; 等等

一旦你解决了发现问题,你仍然有可达性问题。 大多数iOS设备通常没有公共可访问的IP地址; 相反,他们是在做networking地址转换的路由器的后面,无论他们是家庭WiFi路由器还是手机运营商的3Gnetworking。 这意味着你需要一些方法来做NAT Hole Punching来让两个iPhone相互通话。 知道每个设备的公共地址和内部地址的人可以安排他们build立彼此的连接。 你可以让普通的同伴这样做(尽pipe这使得jumpstart问题更大),或者让你的超级同事/介绍服务器等等。 这样做。

如果你想自己构build所有这些,你可能想看看其他的实现。 BitTorrent(包括跟踪器和DHT)已经被很好的理解和logging在从好奇最终用户的“谎言到孩子”到详细的协议规范和开源实现的连续层次上。 然后再看看其他一些P2Pnetworking,因为BitTorrent并不完美,也不会去做每个人都想出来的东西。

你可以使用GameKit 。 它有可以帮助你的牵线搭桥 api。

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

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

1)甚至不考虑使用3G / 4G,它只是不能很好地保持开放的套接字连接。

2)我会在互联网上使用某种经纪人服务来连接两者。 为了发现,您可以列出服务上可用的设备。

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

你不能。 如果设备是所有在线与WiFi,这可能是可能的,并依靠像pc连接的路由器设置。 如果某些设备与3g或gprs协议连接,则可能根本没有IP地址。

构build适用于iOS的Jabber客户端:XMPP设置

这里是链接