【问题标题】:C# Socket doesn't disconnect properlyC# Socket 没有正确断开连接
【发布时间】:2010-11-25 18:24:12
【问题描述】:

我正在为游戏 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 );

.

Log( "Received unrecognized packet from " + player.IPAddress() + ", disconnecting client!" );

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

【问题讨论】:

  • 如何检测客户端断开连接?

标签: c# .net sockets disconnect


【解决方案1】:

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

【讨论】:

  • 有,但是使用错误的协议断开连接怎么办?我不明白为什么关闭应用程序可以实现它,但我的代码却不能。
  • 另一个想法:你要断开哪个套接字?您是在断开侦听器还是与客户端通话?也许如果您发布更多代码,我们可以解决。
  • 我正在断开客户端套接字,但客户端可能会检查端口是否仍处于连接状态。
  • 你能贴一些代码,特别是Accept调用周围的部分,以及Shutdown之前的东西吗?
【解决方案2】:

Socket.Disconnect() 呢?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-03
    • 2020-09-20
    • 2022-07-08
    • 1970-01-01
    • 1970-01-01
    • 2016-12-30
    相关资源
    最近更新 更多