首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自动端口转发(UPnP ?)C++

自动端口转发(UPnP ?)C++
EN

Stack Overflow用户
提问于 2012-11-14 14:32:58
回答 1查看 11K关注 0票数 14

免责声明:我在这里仔细阅读了每一个类似的主题,并进行了谷歌搜索。这些都没有回答我的问题,所以我想积累这方面的信息。我的英语可能不太好,很抱歉。

我想制作一个p2p应用程序(一个游戏)。显然,很多人会在一台机器上运行这个程序,这台机器是本地网络的一部分,有一个互联网接入点(路由器),如果没有端口转发,应用程序就无法工作。因此,我做了一项研究,发现我可以使用UPnP进行自动端口转发。微测试代码是用来访问端口转发的:

代码语言:javascript
复制
bool CPortController::Init() {


  HRESULT result = CoInitialize(NULL); // Must be NULL
  if (FAILED(result)) return false;

  result = CoCreateInstance(__uuidof(UPnPNAT), NULL, CLSCTX_ALL, __uuidof(IUPnPNAT), (void **)&Nat);
  if (FAILED(result) || !Nat) return false;

  result = Nat->get_StaticPortMappingCollection(&Collection); 
  if (FAILED(result) || !Collection) return false; // Here I'm getting S_OK as result, but Collection is always == 0

  return true;
}

我发现: 1.旧系统(不,我有带更新的Win7 ) 2.路由器可能没有UPnP功能或者没有启用3.防火墙可能阻塞TCP端口2869或UDP端口1900,这都是UPnP所需要的。

遗憾的是,我无法访问路由器来检查最后两个,但这并不重要,因为Skype和uTorrent (都是p2p)工作得很好。我需要找到方法来做同样的技巧,并自动与我的应用程序转发端口,而不要求用户做任何事情。

关于UPnP库:我发现了很少的UPnP库(PlatinumUPnP,miniUPnP),但是它们似乎有太多的面向智能设备并将它们组合在一起的代码.嗯..。我不确定我是否需要这样做来完成我的任务,我也找不到一段用于自动端口转发的代码(不使用WinUPnPAPI,我在上面列出了这些代码)。

我现在有点迷路了。有人能告诉我继续研究的方向吗?也许除了UPnP,还有什么别的东西吗?也许有一个库(我错过了)可以使用?请撒点光。提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-14 22:35:19

DeviceSpy中运行UPnP开发工具并搜索您的网络中的InternetGatewayDevice。如果没有,则您的路由器不能使用UPnP或禁用它。如果有,请检查WANIPConnection服务。请注意,InternetGatewayDevice v2 (自2010年起)不允许在UPnP上设置静态端口映射(租约时间0)。

正如@Rook所指出的,建立P2P连接还有其他方法,因此其他一些随机P2P软件工作的事实并不一定意味着软件知道如何配置您的端口映射。特别是Skype并不是真正的P2P,它依赖于大量的专用超级节点。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13380792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档