Objective c UDP在不同网络上的两台计算机如何相互连接?

Objective c UDP在不同网络上的两台计算机如何相互连接?,objective-c,cocoa,networking,udp,Objective C,Cocoa,Networking,Udp,两台分别位于不同网络上的计算机如何使用UDP相互连接?我知道你可以通过设置端口转发来实现这一点,但我知道Xbox Live等服务无法通过这一点实现。这是怎么可能的?有没有办法在单独的网络上获得另一台计算机的地址 编辑 好的,谢谢您的帮助,我正在使用objc,所以我最终使用asyncsocket和portmapper进行路由器配置 首先,获取远程计算机的公共IP: 使用动态dns 制定自己的协议并运行服务器以保留用户和IP的列表 计算传入的UDP数据包: 使用客户机/服务器通信而不是点对点

两台分别位于不同网络上的计算机如何使用UDP相互连接?我知道你可以通过设置端口转发来实现这一点,但我知道Xbox Live等服务无法通过这一点实现。这是怎么可能的?有没有办法在单独的网络上获得另一台计算机的地址

编辑

好的,谢谢您的帮助,我正在使用objc,所以我最终使用asyncsocket和portmapper进行路由器配置


首先,获取远程计算机的公共IP:

  • 使用动态dns
  • 制定自己的协议并运行服务器以保留用户和IP的列表
计算传入的UDP数据包:

  • 使用客户机/服务器通信而不是点对点通信
  • 使用UPnP协议(我认为xbox可以做到这一点)向路由器请求端口。并非所有路由器都支持或启用UPnP
  • 使用回合/眩晕协议。此协议被设计为绕过UDP nat。这需要一个外部服务器,但也有可用的免费服务器

我认为有UPnP和STUN的库,但我不能肯定地告诉你。

拉丁语是正确的,STUN是一个很好的解决方案-查看iOS的STUN协议实现

AlGore为此发明了一个甜蜜的网络。嗯,这似乎很奇怪,因为有很多人使用点对点,比如iChat、skype和其他很多东西。。。如果他们首先连接到一台服务器,服务器能否识别出他可以发送给另一台客户端的地址,以便连接到另一台客户端?所有这些应用程序都运行客户端/服务器和p2p通信。首先让系统知道客户端的公共IP地址。然后,困难的部分是从路由器的外部打开(转发)端口到客户端pc的专用地址。好的,那么基本上,您的客户端程序只需要为当前连接设置端口转发?当您将套接字绑定到给定端口时,它是否基本上设置了该端口转发?在UPnP的情况下,应用程序首先与路由器协商一个可用端口,然后绑定它。