与Lidgren的UPnP和端口转发失败

时间:2014-06-27 05:16:31

标签: c# networking xna portforwarding upnp

我对网络很新,而且lidgren让我更容易开始为我的XNA PC游戏添加多人游戏功能。我一直在网络上测试我的笔记本电脑就在我旁边,它一直很好用。问题是我将我的游戏副本发送给荷兰的一位朋友,她无法与我联系。我将它设置为一个人是主持人,其他人是连接到该主机的客户。

主机按如下方式设置服务器:

 Config = new NetPeerConfiguration("game");
 Config.Port = 14242;
 Config.EnableUPnP = true;
 Config.MaximumConnections = 3;
 Config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
 Server = new NetServer(Config);
 Server.Start();
 Server.UPnP.ForwardPort(14242, "Forlorn Forest");

这是ForwardPort失败时抛出的异常并给出“错误请求”: enter image description here

抛出两个Web异常: enter image description here enter image description here

它说明了远程主机关闭的连接,无法在异常详细信息中从传输连接中读取数据: enter image description here

有关这里可能会发生什么的任何想法?我的路由器上启用了UPnP。我已经看过WireShark的网络流量了,我可以看到它显示格式错误的数据包,虽然我没有弄乱任何Lidgren代码,所以我不知道为什么会这样。

1 个答案:

答案 0 :(得分:2)

遗憾的是,UPnP协议规范未在大量家庭路由器上正确实施。这样做的结果是所有UPnP框架(甚至英特尔规范框架)都无法正确地与一些本地路由器通信UPnP。

您应该会发现并非所有朋友路由器都能成功打开您请求的端口。您可以做的最好的事情是确保您的代码没有与您正在使用的UPnP框架相关的故障情况和未捕获的异常,并且您已经详细记录了UPnP失败的用户如何为您的游戏手动设置端口转发。