java - Netty - 无法在注册时写入 channel (channelRegistered 事件)

标签 java server client netty channel

我遇到了有关在 channel 注册(客户端 -> 服务器)时发送数据包的问题。 进一步测试一下,如果我在注册后发送数据包,我就可以发送数据包。 相反的方式(服务器 -> 客户端)工作得很好。 注册功能:

@Override
public void channelRegistered(ChannelHandlerContext ctx) throws Exception {
    ctx.channel().write(new byte[] {0x00});
}

它还会在过滤器链中遇到编码器:

public class Encoder extends MessageToByteEncoder<byte[]>{

@Override
protected void encode(ChannelHandlerContext ctx, byte[] b, ByteBuf bb) throws Exception {
    byte[] data = b.getData();

    bb.writeInt(data.length);
    bb.writeBytes(data);
}
}

服务器因此不会收到上述数据包 - 因此, 我调试了一下 ChannelRead 事件是否触发,但没有触发。 (我的解码类也没有解码数据)

有什么假设吗?

最佳答案

channelRegistered 在 channel 注册到其 EventLoop 时被调用。这并不意味着它已经准备好发送数据, channel 甚至还没有打开套接字。 您需要 channelActive,它在 channel 处于 Activity 状态(即准备好发送和接收数据)时调用。

关于java - Netty - 无法在注册时写入 channel (channelRegistered 事件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41314525/

相关文章:

java - 如何构建 HTML org.w3c.dom.Document?

node.js - 为什么我的 websocket 服务器无法正确提供 HTML 页面?

php - 使用 PHP 检查服务器上是否安装了 MySQL

C Socket 程序未打印所需的输出(无错误)

Java:根据动态生成的文本字段名称更改变量?

java - 对于不同的 java 版本,写入和读取 png 图像必须相同

c# - 任何c#应用程序都可以在linux上运行吗

php - 加密的 Sql 数据在服务器之间传输时是否安全

C# 分隔 TCP 消息

java - Selenium WebDriver get(url) 速度问题