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

时间:2012-04-18 13:51:28

标签: iphone objective-c ios xcode network-programming

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

5 个答案:

答案 0 :(得分:9)

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

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

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

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

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

答案 1 :(得分:4)

您可以使用GameKit。它有matchmaking api可以帮助你。

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

答案 2 :(得分:3)

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

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:-1)

为iOS构建Jabber客户端:XMPP设置

这里是link