如何从NioSocketChannel阅读?

时间:2018-01-30 12:35:17

标签: netty

我正在使用NioSocketChannel。 我必须使用它,因为它是唯一一个与netty的Bootstrap配合使用的代码:

    Bootstrap b = new Bootstrap();
    b.group(group).channel(NioServerSocketChannel.class)

当我收到消息时,在NioSocketChannel中,我无法从中读取消息。 这个类中没有对缓冲区的读取,只有简单的read(),它返回Channel,当我尝试使用它时抛出异常:"通道未注册到事件循环"

有人熟悉这门课吗? 谢谢, Osnat。

1 个答案:

答案 0 :(得分:1)

您需要注册管理事件循环的处理程序。然后,您不直接从通道读取,而是连接到通道并向其注册观察者。细节取决于您的实际环境,但大致可能如下所示:

Bootstrap b = new Bootstrap();
b.group(group).channel(NioServerSocketChannel.class).handler(/*  your handler */)

ChannelFuture channelFuture = b.connect(socketAddress, new InetSocketAddress(address, port));
responseFuture.addListener(new ChannelFutureListener() { 
   // ... listen to changes                         
}

programcreek上有很多优秀的代码段,这些代码片段可以帮助您解决问题。