加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

自动端口转发(UPnP?)C

发布时间:2020-12-16 05:27:23 所属栏目:百科 来源:网络整理
导读:免责声明: 我仔细阅读了每一个类似的主题,并进行了谷歌搜索.没有人回答我的问题,所以我想积累这个话题的信息. 附:我可能不会那么好英语,很抱歉. 我想做一个p2p应用程序(一个游戏).很明显,很多人会在一台机器上运行这个程序,这台机器是一个互联网接入点(路
免责声明:
我仔细阅读了每一个类似的主题,并进行了谷歌搜索.没有人回答我的问题,所以我想积累这个话题的信息.
附:我可能不会那么好英语,很抱歉.

我想做一个p2p应用程序(一个游戏).很明显,很多人会在一台机器上运行这个程序,这台机器是一个互联网接入点(路由器)的本地网络的一部分,而应用程序根本不会在没有端口转发的情况下工作.所以我做了一个研究,发现我可以用UPnP自动进行端口转发.微测试代码被写入访问端口转发:

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;
}

搜索原因(见代码中的注释)发现我发现:
旧系统(不,我有Win7更新)
2.路由器可能没有UPnP功能,或者可能未启用
3.防火墙可能会阻止UPnP所需的TCP端口2869或UDP端口1900

可悲的是,我没有访问路由器检查最后2,但这并不重要,因为Skype和uTorrent(两个p2p)工作完美.我需要找到方法来做同样的技巧和转发端口自动与我的应用程序,而不要求用户做任何事情.

关于UPnP库:
我发现很少的UPnP库(PlatinumUPnP,miniUPnP),但他们似乎有很多代码面向寻找智能设备,并把它们放在一起…我不知道我需要这样完成我的任务和我找不到一段代码(没有使用那些WinUPnPAPI,我在上面列出)进行自动端口转发.

我现在有点迷路了有谁能告诉我继续研究的方向吗?也许UPnP还有其他的东西?也许有一个lib(我错过)使用?请散开一些光.先谢谢你.

解决方法

从 UPnP Developer Tools运行DeviceSpy,并在网络中搜索InternetGatewayDevice.如果没有,您的路由器不能UPnP或禁用.如果有一个,请检查WANIPConnection服务.请注意,从InternetGatewayDevice v2(自2010年起),您不能在UPnP上设置静态端口映射(租期0).

正如@Rook指出的那样,还有其他建立P2P连接的方法,所以其他一些随机P2P软件的工作原理并不一定意味着软件知道如何配置端口映射. Skype尤其不是P2P,it depends on huge number of dedicated supernodes.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读