自动端口转发(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; } 搜索原因(见代码中的注释)发现我发现: 可悲的是,我没有访问路由器检查最后2,但这并不重要,因为Skype和uTorrent(两个p2p)工作完美.我需要找到方法来做同样的技巧和转发端口自动与我的应用程序,而不要求用户做任何事情. 关于UPnP库: 我现在有点迷路了有谁能告诉我继续研究的方向吗?也许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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |