Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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#插座不';不要正确地断开_C#_.net_Sockets_Disconnect - Fatal编程技术网

C#插座不';不要正确地断开

C#插座不';不要正确地断开,c#,.net,sockets,disconnect,C#,.net,Sockets,Disconnect,我正在为Minecraft游戏开发一个服务器,当玩家断开连接时,它会显示一个深红色的屏幕。我正在像这样断开玩家的连接: Socket.Shutdown( SocketShutdown.Both ); Socket.Close(); 之后我似乎无法写入数据,但断开连接的屏幕没有出现。它只在我完全终止服务器应用程序时出现,这表明连接根本没有关闭 我做错了什么 编辑: socket.BeginAccept( new AsyncCallback( AcceptClient ), null ); pr

我正在为Minecraft游戏开发一个服务器,当玩家断开连接时,它会显示一个深红色的屏幕。我正在像这样断开玩家的连接:

Socket.Shutdown( SocketShutdown.Both );
Socket.Close();
之后我似乎无法写入数据,但断开连接的屏幕没有出现。它只在我完全终止服务器应用程序时出现,这表明连接根本没有关闭

我做错了什么

编辑:

socket.BeginAccept( new AsyncCallback( AcceptClient ), null );

private void AcceptClient( IAsyncResult result )
    {
        try
        {
            // Initialize player
            Socket client = _socket.EndAccept( result );


我不知道Minecraft的API是什么样子的,但很可能你需要先向客户端发送一个命令,让他们知道他们已经断开了连接。

Socket.Disconnect()?

有,但是如果使用错误的协议断开连接呢?我不明白为什么关闭应用程序可以让它发生,但我的代码不能。另一个想法是:你正在断开哪个套接字?您是在断开侦听器的连接,还是在断开与客户交谈的连接?也许如果你发布更多的代码,我们可以解决这个问题。我正在断开客户端套接字,但客户端可能会检查端口是否仍然打开以查看连接状态。你可以发布一些代码,特别是
接受
调用的部分,以及
关闭之前的内容
?如何检测客户端中的断开连接?
Log( "Received unrecognized packet from " + player.IPAddress() + ", disconnecting client!" );

player.Disconnect();
_clients.Remove( player );