Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
netty为什么频道尚未连接_Netty - Fatal编程技术网

netty为什么频道尚未连接

netty为什么频道尚未连接,netty,Netty,在服务器入站通道channelActive方法中初始化客户端通道。我可以看到pcap已经完成了三次握手(253是本地主机,15是远程主机) 但是当写入客户机通道时,它抛出 java.nio.channels.NotYetConnectedException:在 io.netty.channel.AbstractChannel$AbstractSafe.flush0()(未知 (来源) 根据我的理解,客户端通道应该处于活动状态,因为三方握手意味着客户端通道已经准备好发送数据包。但通过计算clie

在服务器入站通道
channelActive
方法中初始化客户端通道。我可以看到pcap已经完成了三次握手(253是本地主机,15是远程主机)

但是当写入客户机通道时,它抛出

java.nio.channels.NotYetConnectedException:在 io.netty.channel.AbstractChannel$AbstractSafe.flush0()(未知 (来源)

根据我的理解,客户端通道应该处于活动状态,因为三方握手意味着客户端通道已经准备好发送数据包。但通过计算clientChannel.isActive(),结果是错误的,奇怪的

服务器入站通道:

Channel clientChannel;
@Override
public void channelActive(ChannelHandlerContext ctx) {
    final Channel inboundChannel = ctx.channel();

    try {
        Bootstrap b = new Bootstrap();
        b.group(inboundChannel.eventLoop())
            .channel(inboundChannel.getClass())
            .handler(new SomeClientChannelInitializer(ctx));

        // Make the connection attempt.
        ChannelFuture f = b.connect(host, port);
        clientChannel = f.channel();
    } catch (Exception e) {// no exception}
}

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    log.info("receive: {}", msg);
    clientChannel.writeAndFlush(msg -> this::pojo);
}
编辑: 我通过添加
wait

  f = b.connect(host, port);
  clientChannel = f.channel();
  try {
      f.await(3L, TimeUnit.SECONDS);
      boolean success = clientChannelFuture.isSuccess();

我不确定这是否合适,官方代理示例中没有这一点

您需要通过连接到connect
ChannelFuture
ChanneFutureListener
进行写入,或者需要对其进行
sync()
/
等待()

请记住,netty中的所有内容都是异步的,这意味着当
connect
方法返回并触发
write
时,
通道可能尚未完全连接