Netty 写入数据接收不到?
public static void initChannel() throws InterruptedException{
// Configure the client.
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group)
.channel(NioSocketChannel.class)
.option(ChannelOption.TCP_NODELAY, true)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {}
});
SocketAddress socketAddress = new InetSocketAddress(HOST, PORT);
ChannelFuture future = b.connect(socketAddress).sync();
//debug 确实触发了unsafe.write
future.channel().writeAndFlush("hello world");
future.channel().closeFuture().sync();
} finally {
group.shutdownGracefully();
}
}
此段代码,发送到hello world 丢失了[无论接收端有没有解码器]
但是当我在initChannel上加入 ch.pipeline().addLats(new StringEncoder())之后,
在服务端加入decoder就可以接收到
请问 encoder/decoder是必须的么? 不加消息为什么会丢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
直接写字符串是不行的,必须是
ByteBuf
或FileRegion
类型,可以对字符串封装一下:其实
StringEncoder
也是做的这件事。NioChannel
底层调用的写方法如下: