自动端口转发(UPnP?)C

前端之家收集整理的这篇文章主要介绍了自动端口转发(UPnP?)C前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
免责声明:
我仔细阅读了每一个类似的主题,并进行了谷歌搜索.没有人回答我的问题,所以我想积累这个话题的信息.
附:我可能不会那么好英语,很抱歉.

我想做一个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.

原文链接:https://www.f2er.com/c/114731.html

猜你在找的C&C++相关文章