Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Lidgren第二次创建服务器实例会导致System.Net.Sockets.SocketException_C#_Sockets_Monogame_Lidgren - Fatal编程技术网

C# 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

我在Monogame中使用Lidgren。 有一种可能性,玩家可能想主持一场比赛,然后离开大厅,想再次主持。但是,当我在代码中执行此操作时,会引发以下异常:System.Net.Sockets.SocketException:“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”

相关代码:

// 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;