我有一个旧式套接字客户端,通过执行以下操作从服务器读取报告 -
DataInputStream dis.....
int reportlength = dis.readInt();
byte [] repBytes = new byte[reportlength ];
dis.read(repBytes , 0, reportlength );
我如何在Netty客户端中执行类似操作?
我试图让它在下面的代码中工作但到目前为止没有成功,因为read和read complete方法被多次调用,我无法取出报告长度部分。
class CommunicationHandler extends ChannelInboundHandlerAdapter
{
public void channelRead(ChannelHandlerContext ctx, Object obj) {
...
}
public void channelReadComplete(ChannelHandlerContext ctx) {
....
}
}
答案 0 :(得分:2)
您可以使用LengthFieldBasedFrameDecoder
正确构建入站数据。要了解为何您针对单条消息收到多个channelRead()
个事件,请阅读“处理流式传输”#39;官方用户指南中的部分:http://netty.io/wiki/user-guide-for-4.x.html#wiki-h3-11