好的,因此我需要使用C++编写的应用程序才能建立对等UDP连接。我考虑过打孔和UPNP(使用端口映射)。打孔似乎有些困惑:您需要服务器,大量垃圾UDP数据包。我真的不想弄乱服务器,所以我选择了UPNP。我建立了miniupnpc http://miniupnp.free.fr/库,并在家里愉快地使用了它。但是,当我在另一个网络中尝试过我的应用程序时,结果却非常令人沮丧:

  • 只有1个(我)路由器可以满足我的所有需求(本地和外部ip,端口映射)
  • 3路由器仅向我显示本地ip,并且可能(我尚未测试)进行端口映射
  • 1路由器支持upnp,但miniupnpc找不到设备
  • 1路由器不支持upnp(已通过upnp开发人员工具测试)

  • 因此,我有2个问题:
  • UPNP是不是很常见,或者我只是倒霉,还是使用miniupnpc错误?
  • 是否有其他方法可以建立不需要外部服务器的对等UDP连接?(因此不需要打孔)

  • 谢谢!

    最佳答案



    您不能信任随机路由器来支持UPnP IGD端口映射,并且绝对不能信任要启用的功能。



    严格来说,在典型的家庭网络中打孔并不需要第三方服务器,但是您确实需要一种使端点知道彼此的外部IP地址和端口的方法:那时,两台机器都可以开始向彼此发送消息:最初的消息确实会被丢弃,但是当路由器看到内部IP已将数据包发送到外部IP时,它也将允许传入流量(因为路由器将其视为来自内部IP的数据包的响应,即使它们不是)。真的)。

    请参阅ICE,以了解与该区域类似的标准。

    关于c++ - 对等连接,当一个对等连接位于NAT之后时,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25908144/

    10-10 21:10