我对网络相当陌生,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”:
以及抛出的两个网络异常:
它在异常详细信息中说明了连接被远程主机关闭并且无法从传输连接读取数据:
关于这里可能发生的事情有什么想法吗?我的路由器启用了 UPnP。我已经使用 WireShark 查看了网络流量,我可以看到它显示格式错误的数据包,尽管我没有弄乱任何 Lidgren 代码,所以我不确定为什么会这样。
最佳答案
不幸的是,UPnP 协议(protocol)规范尚未在大量家用路由器上正确实现。这样做的结果是所有 UPnP 框架(甚至是 Intel 规范框架)都无法与某些本地路由器正确通信 UPnP。
您应该会发现,并不是您所有的 friend 路由器都能成功打开您请求的端口。您能做的最好的事情就是确保您的代码没有与您正在使用的 UPnP 框架相关的故障场景和未捕获的异常,并且您有充分的文档记录失败的 UPnP 用户如何为您的游戏手动设置端口转发。
关于c# - Lidgren 的 UPnP 和端口转发失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24444424/