两部移动设备(iPhone)之间是否可以通过互联网连接套接字?

11

两部移动设备(iPhone)是否可以通过互联网连接套接字?

我正在尝试发现每个设备的IP地址并直接进行连接。我知道可以使用Bonjour在本地网络上完成此操作,但我需要在互联网上实现两个设备之间的高速连接。

谢谢。


1
因为我对如何应对这个问题持开放态度,所以这是主观的。谢谢! - Jamey McElveen
1
这不是主观意义上的。这相当客观。重新标记了。我还删除了实时,因为这也不是那种“实时”。 - Rog
7个回答

10
如果您拥有两个可路由的IP地址,那么这应该是可能的。但我不确定3G网络提供的IP地址是否可路由。如果您使用WIFI连接,则您获得的IP几乎肯定无法路由。假设您有一个可路由的IP,那么这应该是可能的。 关键在于发现另一个设备的IP地址。最好的方法可能是让每个设备在应用程序启动时向Web服务注册其IP地址,然后查询该服务以查找其他设备的IP地址。 当应用程序关闭或IP更改时,管理“注销”IP可能会有些棘手,但应该可以实现。 如果您拥有一个它们都可以连接的服务器,则应该能够使用该服务器实现解决方案(即使手机实际上没有直接连接到对方)。这将避免手机需要可路由IP的问题。 至于如何桥接套接字-您的服务器程序将基本上像老式电话交换台操作员一样工作。您的服务器软件中应该内置某种注册和发现协议,允许手机向服务器注册自己,查询当前连接到服务器的其他手机列表,指示它要与哪个手机通信,并接受来自其他手机的连接。 一旦知道谁想跟谁说话,您的服务器软件将通过从一个手机套接字读取数据并将该数据写入另一个手机套接字来使两者连接起来。

1
我可以轻松地处理在Web服务器上注册每个设备的IP。但是,您提到Wi-Fi和3G可能/很可能无法路由,这让我感到担忧。我希望它也能与iPod touch一起使用,后者只能通过Wi-Fi连接。我可以设置一个Web服务器。我猜每个设备都可以使用(持久性?)套接字连接到服务器。我只是不知道如何在服务器上的两个连接/套接字之间传递数据。此外,这是否足够快速令人担忧? - Jamey McElveen
还有,感谢您的反馈,我觉得现在情况已经变得更加清晰了。 - Jamey McElveen
好的,我编辑过我的回复并添加了更多信息。关于性能,它很大程度上取决于您的服务器有多快以及需要处理多少个同时连接。使用良好实现的服务器,它应该几乎和直接手机对手机的连接一样快。 - Eric Petroelje
太棒了,谢谢!我会尝试那种方法。虽然它需要更多的服务器资源,但它正在成为最佳解决方案。 - Jamey McElveen
1
如果IP地址不可路由,您可以始终使用“打洞”技术来穿越NAT。 - ryyst

2

仅仅是一些建议,如果您可以让它们每一个连接到第三方网站,那么您就可以知道每个地址。将电话A的地址发送给电话B(和/或电话B发送给电话A),然后按照您的意愿进行连接。


1

我在开发一个应用程序时遇到了这个问题。我试图从iPhone连接到PC的蜂窝卡。问题是AT&T不支持iPhone的移动终止,因此两个在AT&T网络上的手机无法相互连接。这是来自AT&T天线工程师的直接说法。

我通过让iPhone VPN进入服务器然后连接到PC蜂窝卡来使其工作,但除此之外,它不起作用。


1

虽然这是一个旧的主题,但我刚刚发现它。您可以使用STUN服务器(或NAT-PMP)获取公共IP地址/端口组合,然后通过短信发送到另一部手机。只要在第一个设备上打开一个监听端口,那么您的第二个设备就可以直接使用您在短信中发送给它的公共IP地址/端口进行连接(SMS push registry可以自动唤醒第二个设备上的应用程序执行此操作)。


1

你看过所有的3.0功能了吗?特别是点对点网络(已公开存在)。


1
Peer在3.0版本中支持WAN和蓝牙。我已经使它们正常工作了,现在只想添加第三个层次。 - Jamey McElveen

1

WiFi路由器通常具有名为“端口触发”的功能,允许内部主机(在本例中为iPhone)通知路由器他们希望将特定端口的连接转发到它们。我不知道iPhone是否支持此协议。

对于IP查找,如果两个主机事先已知,则可以考虑使用DynamicDNS;或者如上所述,如果它们未知(即朋友交换主机名与陌生人发现彼此),则可以使用自定义Web服务。


0

我有一种非常强烈的感觉(但没有证据):iPhone地址将成为不可路由的。当然,这实际上取决于运营商,但AT&T会分配10.x.x.x地址。

苹果公司有示例(桌面)代码,使用Bonjour在支持UnPnP的WiFi路由器上实现端口映射。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接