java - NettyIO 断开客户端与服务器的连接

标签 java connection handler netty channel

如何断开 Netty 客户端与服务器的连接,以便它在服务器端执行 handerRemoved 方法并完全停止运行?我尝试使用group.shutDownGraceFully(),但客户端仍然保持与服务器的连接。我是否缺少任何方法?

我还注意到,当我尝试连接到服务器并且它无法访问(连接被拒绝)时,下次我连接到真实服务器时它会连接,但不会发送或接收任何更多消息。

最佳答案

总的来说,您似乎对网络编程不太熟悉。

我是 Netty 新手,所以请不要将我所说的任何内容视为 100% 真实,尤其是接近 100% 效率的情况。

所以网络编程的一个主要基本事实是客户端和服务器不是直接链接的(显然)。为了在服务器上执行方法,您需要从客户端向服务器发送消息。例如:

您在客户端上拥有的内容:

 //on shutdown
{
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }

你想要什么:

{
        yourchannelname.writeAndFlush("bye"+"\r\n")
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }

当服务器收到bye命令时:

   // If user typed the 'bye' command, wait until the server closes
            // the connection.
            if ("bye".equals(line.toLowerCase())) {
                ch.closeFuture().sync();
                break;
            }
        }
        //this is for safety reasons, it is optional-ish

        // Wait until all messages are flushed before closing the channel.
        if (lastWriteFuture != null) {
            lastWriteFuture.sync();
        }
      //what you already have
    } finally {
        // The connection is closed automatically on shutdown.
        group.shutdownGracefully();
    }
}

希望这有帮助,iv 以前从未回答过有关堆栈溢出的问题,所以我希望我至少听起来我知道我在做什么:P

关于java - NettyIO 断开客户端与服务器的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29052100/

相关文章:

java - 在 JavaFX 中使用 Enter 触发按钮的 onAction

java - 在没有公共(public) IP 的情况下通过 http 连接两台计算机

php - mysql_connect() 访问被拒绝

c# - 检查处理程序是否!= null 与检查事件是否!= C# 中的 null

java - 遍历图像的每个像素

java - 具有基本授权的 HTTP 帖子在 Java 中不起作用

c# - 为什么从 Java 和 C# 中删除 constness?

sql-server - 如何修复 native 客户端错误 'Connection is busy with results for another command' ?

带处理程序的 Android AsyncTask

handler.postAtTime 和 handler.postDelayed 的区别