当前位置: 首页 > 知识库问答 >
问题:

如何用Netty 4.0.x检测新的传入连接?

宦子琪
2023-03-14

如何检测Netty 4.0.x的新传入连接?下面是一个简单服务器的代码:

public static void main(String[] args) {
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap b = new ServerBootstrap();
        b.group(bossGroup, workerGroup)
         .channel(NioServerSocketChannel.class)
         .childHandler(new ChannelInitializer<SocketChannel>() {
             @Override
             public void initChannel(SocketChannel ch) throws Exception {
                 System.out.println("Init channel");

                 ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {

                    @Override
                    public void channelRegistered(ChannelHandlerContext ctx) {
                        System.out.println("Channel registered");
                    }

                    @Override
                    public void channelActive(final ChannelHandlerContext ctx) {
                        System.out.println("Channel active");
                    }

                    @Override
                    public void channelRead(ChannelHandlerContext ctx, Object msg) {
                        System.out.println("Channel read");
                        ctx.writeAndFlush((ByteBuf) msg);
                    }

                    @Override
                    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
                        System.out.println("Channel exception caught");
                        cause.printStackTrace();
                        ctx.close();
                    }

                 });
             }
         })
         .option(ChannelOption.SO_BACKLOG, 128)
         .childOption(ChannelOption.SO_KEEPALIVE, true);

        ChannelFuture f;
        try {
            f = b.bind("127.0.0.1", 8080).sync();
            f.channel().closeFuture().sync();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    } finally {
        workerGroup.shutdownGracefully();
        bossGroup.shutdownGracefully();
    }
}

问题是我无法检测到连接建立的时刻。所有System.Out.Printlns仅在客户端向服务器发送某些信息后调用。这意味着在客户端向服务器发送数据之前,服务器不能向客户端发送任何数据。

    null
    null

有什么方法可以达到这样的行为?

共有1个答案

慎望
2023-03-14

您可以在客户端连接到服务器时发送一些数据,因此可以在channelRegistered或channelActive方法中使用CTX.WriteAndFlush(msg)。如果您的客户没有收到任何数据,您应该确保编码的类型是正确的。

 类似资料:
  • 问题内容: 在我的Java应用程序中,如何检测Internet连接速度有多快?例如,我在家中使用AT&T Fast DSL,我想知道是否有一种方法可以编写执行以下操作的方法: 它将返回以kbps为单位的数字,例如2800kbps [2.8 M] 编辑:我要问的原因是在我的应用程序中,我可以打开多个Internet流,具体取决于用户的Internet连接速度,我希望它自动确定要打开多少个流而不会中断

  • 我正在尝试检测已经连接到android的usb设备。我知道有动作可以检测USB何时连接或断开。但是我真的不知道如何在将usb设备连接到android后检查设备。另外,我发现每个USB设备都有它的设备类别代码,但是我怎么知道连接的是哪种设备呢?例如,我需要检测usb鼠标和键盘;我如何区分它们?

  • 问题内容: 在Linux环境中,我需要检测RJ45连接器与其插槽的物理连接或断开连接状态。最好仅使用BASH脚本。 在其他站点上提出的以下解决方案不适用于此目的: 使用’ifconfig’-由于可以连接网络电缆,但网络配置不正确或当前未启动。 ping主机-因为产品将使用未知的网络配置和未知的主机位于LAN内。 / proc文件系统中没有可用的某种状态(其他所有文件都在其中)吗? Linux世界应

  • 我有数据,我想应用滚动函数来检测哪个点的值大于特定阈值。 我想要的是找到下一个2个值高于某个阈值(例如30)的行。这将产生以下结果: 我有一个大的数据集(几百万行),所以我试图找到一个有效的解决方案。也许使用?由reprex包(v0.2.1)在2019-02-26创建

  • 问题内容: 当我在Turtle图形中运行无限循环绘图时单击X(关闭)按钮时,会出现一些错误消息。 这是一个例子: 当我关闭窗口时,将显示以下错误消息。 我想知道如何避免此类错误消息。 有什么方法可以将tkinter模块中Tk类的“协议”方法与“ WM_DELETE_WINDOW”选项一起使用? 问题答案: 是的,确实可以通过注册一个函数(我称它为,但是您可以选择任何函数名)来拦截窗口关闭事件,从而

  • 问题内容: 我需要根据他们的IP或http标头了解用户当前所在的时区。 关于这个问题,我有很多答案,但是我听不懂那些答案。有人说使用。但是这是什么意思? 我的(index.php)页面的根目录中有一个。因此,为此,我必须动态获取时区并将其设置为。 问题答案: 总结一下Matt Johnson在代码方面的答案: