我想通过套接字连接多个设备,而不需要任何服务器实现。我将只使用它来获取将要注册的设备的IP地址。
c8ib6hqw1#
对等通信存在两个主要问题:发现和可达性。首先,你需要知道其他节点的IP地址,然后才能连接到它们。一旦你连接到一个节点网格,它们就可以相互更新网络状态,相互推荐更好的节点,传递新节点加入和离开的通知等。但是你必须设计和实现一个交换信息的机制。更重要的是,你需要以某种方式启动,因为当一个新的对等体启动时,它只处于一个网格中,它没有任何信息可以给予自己。一种可能性是拥有少数知名的“超级同行”或者,你可以用“介绍服务器”来代替对等服务器,提供大致相同的功能。或者,你可以用某种外部方式来交换地址(最简单的是用户在网络论坛或IRC频道上或亲自交易并手动键入),这可以在不同程度上自动化。还有一些快捷方式可以提供帮助-Bonjour可以让其他对等体进入网格,只要LAN上的一个对等体已经在那里; GameCenter/GameKit可用作自动化外部交易网络;等等。一旦你解决了发现问题,你仍然有可达性问题。相反,它们位于执行网络地址转换的路由器之后,无论是家用WiFi路由器还是手机运营商的3G网络。这意味着你需要某种方法来实现NAT打孔,让两部iPhone互相通话。知道每部设备的公共地址和内部地址的人可以安排它们建立相互连接。你可以让普通的对等设备来做这件事(尽管这会使启动问题变得更大)或者让你的超级同行/介绍服务器/等等来做。如果你想自己构建所有这些,你可能需要看看其他的实现。BitTorrent(包括追踪器和DHT)在一个连续的层次上被很好地理解和记录,从好奇的最终用户的“谎言到孩子”,到详细的协议规范和开源实现。然后看看其他一些P2P网络,因为BitTorrent并不完美,而不是尝试去做所有人想出来的事情。
ut6juiuv2#
你可以使用GameKit。它有配对API可以帮助你。它可以用于非游戏应用。
bzzcjhmw3#
我一直在做类似的事情,这是一个巨大的痛苦在屁股。有三个考虑:1)可达性2)发现3)连接本身。1)甚至不要考虑使用3g/4g,它只是不会很好地工作,以保持一个开放的套接字连接。2)我会在互联网上使用某种中介服务来连接两者。对于发现,你可以只列出服务上可用的设备。3)对于连接,我发现IOS套接字库使用起来相当麻烦,但是如果深入到BSD套接字级别,就不会那么糟糕了。这可能会简化编写代理服务的过程。
sr4lhrrt4#
你不能。如果设备是所有在线与wifi,这也许是可能的,并依赖于路由器的设置,就像pc连接。如果一些设备是连接与3g或gprs协议,他们可能没有ip地址。
4条答案
按热度按时间c8ib6hqw1#
对等通信存在两个主要问题:发现和可达性。
首先,你需要知道其他节点的IP地址,然后才能连接到它们。一旦你连接到一个节点网格,它们就可以相互更新网络状态,相互推荐更好的节点,传递新节点加入和离开的通知等。但是你必须设计和实现一个交换信息的机制。更重要的是,你需要以某种方式启动,因为当一个新的对等体启动时,它只处于一个网格中,它没有任何信息可以给予自己。
一种可能性是拥有少数知名的“超级同行”或者,你可以用“介绍服务器”来代替对等服务器,提供大致相同的功能。或者,你可以用某种外部方式来交换地址(最简单的是用户在网络论坛或IRC频道上或亲自交易并手动键入),这可以在不同程度上自动化。还有一些快捷方式可以提供帮助-Bonjour可以让其他对等体进入网格,只要LAN上的一个对等体已经在那里; GameCenter/GameKit可用作自动化外部交易网络;等等。
一旦你解决了发现问题,你仍然有可达性问题。相反,它们位于执行网络地址转换的路由器之后,无论是家用WiFi路由器还是手机运营商的3G网络。这意味着你需要某种方法来实现NAT打孔,让两部iPhone互相通话。知道每部设备的公共地址和内部地址的人可以安排它们建立相互连接。你可以让普通的对等设备来做这件事(尽管这会使启动问题变得更大)或者让你的超级同行/介绍服务器/等等来做。
如果你想自己构建所有这些,你可能需要看看其他的实现。BitTorrent(包括追踪器和DHT)在一个连续的层次上被很好地理解和记录,从好奇的最终用户的“谎言到孩子”,到详细的协议规范和开源实现。然后看看其他一些P2P网络,因为BitTorrent并不完美,而不是尝试去做所有人想出来的事情。
ut6juiuv2#
你可以使用GameKit。它有配对API可以帮助你。
它可以用于非游戏应用。
bzzcjhmw3#
我一直在做类似的事情,这是一个巨大的痛苦在屁股。有三个考虑:1)可达性2)发现3)连接本身。
1)甚至不要考虑使用3g/4g,它只是不会很好地工作,以保持一个开放的套接字连接。
2)我会在互联网上使用某种中介服务来连接两者。对于发现,你可以只列出服务上可用的设备。
3)对于连接,我发现IOS套接字库使用起来相当麻烦,但是如果深入到BSD套接字级别,就不会那么糟糕了。这可能会简化编写代理服务的过程。
sr4lhrrt4#
你不能。如果设备是所有在线与wifi,这也许是可能的,并依赖于路由器的设置,就像pc连接。如果一些设备是连接与3g或gprs协议,他们可能没有ip地址。