C# Lidgren第二次创建服务器实例会导致System.Net.Sockets.SocketException
我在Monogame中使用Lidgren。 有一种可能性,玩家可能想主持一场比赛,然后离开大厅,想再次主持。但是,当我在代码中执行此操作时,会引发以下异常:System.Net.Sockets.SocketException:“每个套接字地址(协议/网络地址/端口)通常只允许使用一次” 相关代码:C# Lidgren第二次创建服务器实例会导致System.Net.Sockets.SocketException,c#,sockets,monogame,lidgren,C#,Sockets,Monogame,Lidgren,我在Monogame中使用Lidgren。 有一种可能性,玩家可能想主持一场比赛,然后离开大厅,想再次主持。但是,当我在代码中执行此操作时,会引发以下异常:System.Net.Sockets.SocketException:“每个套接字地址(协议/网络地址/端口)通常只允许使用一次” 相关代码: // initializing the server NetPeerConfiguration _config = new NetPeerConfiguration("some app id
// initializing the server
NetPeerConfiguration _config = new NetPeerConfiguration("some app id");
// code to enable certain messages.
_server = new NetServer(_config);
_server.Start();
绑定套接字时,\u server.Start()
上的代码崩溃。(m\u socket.Bind()
)
如何清理服务器/套接字,以便第二次创建服务器的新实例?原因是前一个服务器实例的不正确关闭,这意味着该实例仍在使用该端口。 似乎是个bug,内部清理工作不正常 然而,它是固定的,所以一定要有最新版本的lidgren网络
您可以使用
\u server.Socket.Close()代码>只是为了确保在启动另一台服务器或实例之前套接字关闭。是否还有其他人遇到此问题?共有40个视图,(此时)两个向上投票..我认为正在发生的是,每当玩家想要托管时,您都在重新创建服务器,因此它不记得您已经有绑定端口。然后它尝试再次绑定端口,因此失败。我认为您应该尝试的是只调用newnetserver
一次,就像在构造函数中一样-并删除\u server=null
。然后只使用\u server.Start()
和\u服务器。关闭(“…”)
以打开和关闭服务器。让我想想这是否有助于解决您的问题,即如何通过使用线程一次并行处理多个请求。
// cleaning up the server instance
_server.Shutdown("server shutdown");
_server = null;