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

时间:2010-09-08 22:03:21

标签: objective-c cocoa networking udp

如何使用UDP在不同网络上的两台计算机相互连接?我知道你可以通过设置端口转发来实现这一点,但像Xbox Live这样的服务无法解决这个问题。这怎么可能,有没有办法在另一个网络上获取另一台计算机的地址?

修改

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

http://code.google.com/p/cocoaasyncsocket/

http://www.codingmonkeys.de/portmap/

2 个答案:

答案 0 :(得分:3)

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

  • 使用动态dns。
  • 制定自己的协议并运行服务器以保留用户和IP列表。

计算传入的UDP数据包:

  • 使用客户端/服务器通信而不是点对点。
  • 使用UPnP协议(我认为xbox这样做)向路由器询问端口。并非所有路由器都支持或启用了UPnP。
  • 使用TURN / STUN协议。该协议旨在绕过UDP nat。这需要外部服务器,但有可用的免费服务器。

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

答案 1 :(得分:0)

LatinSuD 是对的,STUN是一个很好的解决方案 - 查看iOS的{STR}协议实现https://github.com/soulfly/STUN-iOS