c# - Lidgren 的 UPnP 和端口转发失败

标签 c# networking xna portforwarding upnp

我对网络相当陌生,lidgren 让我可以更轻松地开始为我的 XNA PC 游戏添加多人游戏功能。我一直在通过网络测试在我旁边设置我的笔记本电脑,它一直运行良好。问题是我将我的游戏副本发送给荷兰的一位 friend ,但她无法连接到我。我将其设置为一个人是主机,其他人是连接到该主机的客户端。

主机设置服务器如下:

 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 在失败时抛出的异常并给出“Bad Request”: enter image description here

以及抛出的两个网络异常: enter image description here enter image description here

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

关于这里可能发生的事情有什么想法吗?我的路由器启用了 UPnP。我已经使用 WireShark 查看了网络流量,我可以看到它显示格式错误的数据包,尽管我没有弄乱任何 Lidgren 代码,所以我不确定为什么会这样。

最佳答案

不幸的是,UPnP 协议(protocol)规范尚未在大量家用路由器上正确实现。这样做的结果是所有 UPnP 框架(甚至是 Intel 规范框架)都无法与某些本地路由器正确通信 UPnP。

您应该会发现,并不是您所有的 friend 路由器都能成功打开您请求的端口。您能做的最好的事情就是确保您的代码没有与您正在使用的 UPnP 框架相关的故障场景和未捕获的异常,并且您有充分的文档记录失败的 UPnP 用户如何为您的游戏手动设置端口转发。

关于c# - Lidgren 的 UPnP 和端口转发失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444424/

相关文章:

c# - 动态母版页,可以访问两个母版中的变量

c# - 在 C# 中写入 XML - 'Token StartElement in state Epilog would result in an invalid XML document' 错误

c - 如何让我的服务器同时打开与多个客户端的连接?

java - 本地网络中的android模拟器访问服务器

c# - Microsoft XNA Game Studio 的替代品?

c# - XNA C# 创建平视显示器

c# - 文件扩展名后的空格 -> 奇怪的 FileInfo 行为

c# - 如何解决 "HTTP Error 404.3 - Not Found"错误?

java - 如何在 Java 和 C 中使用 GnuTLS

c# - 如何创建一个做某事的计时器?