免责声明:我在这里仔细阅读了每一个类似的主题,并进行了谷歌搜索。这些都没有回答我的问题,所以我想积累这方面的信息。我的英语可能不太好,很抱歉。
我想制作一个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;
}我发现: 1.旧系统(不,我有带更新的Win7 ) 2.路由器可能没有UPnP功能或者没有启用3.防火墙可能阻塞TCP端口2869或UDP端口1900,这都是UPnP所需要的。
遗憾的是,我无法访问路由器来检查最后两个,但这并不重要,因为Skype和uTorrent (都是p2p)工作得很好。我需要找到方法来做同样的技巧,并自动与我的应用程序转发端口,而不要求用户做任何事情。
关于UPnP库:我发现了很少的UPnP库(PlatinumUPnP,miniUPnP),但是它们似乎有太多的面向智能设备并将它们组合在一起的代码.嗯..。我不确定我是否需要这样做来完成我的任务,我也找不到一段用于自动端口转发的代码(不使用WinUPnPAPI,我在上面列出了这些代码)。
我现在有点迷路了。有人能告诉我继续研究的方向吗?也许除了UPnP,还有什么别的东西吗?也许有一个库(我错过了)可以使用?请撒点光。提前谢谢你。
发布于 2012-11-14 22:35:19
从DeviceSpy中运行UPnP开发工具并搜索您的网络中的InternetGatewayDevice。如果没有,则您的路由器不能使用UPnP或禁用它。如果有,请检查WANIPConnection服务。请注意,InternetGatewayDevice v2 (自2010年起)不允许在UPnP上设置静态端口映射(租约时间0)。
正如@Rook所指出的,建立P2P连接还有其他方法,因此其他一些随机P2P软件工作的事实并不一定意味着软件知道如何配置您的端口映射。特别是Skype并不是真正的P2P,它依赖于大量的专用超级节点。。
https://stackoverflow.com/questions/13380792
复制相似问题