到这里接着上一篇netty01开始,没看过的可以点进去看一下再来
首先来说一下 ByteBuf 这个类吧,这个类是netty里面提供的,接受信息和返回信息格式都是它;
ByteBuf 是一个抽象类,不过netty提供了创建方法
????String rmsg="66666"; ??????????ByteBuf in2= Unpooled.copiedBuffer(rmsg.getBytes());
上一篇已经写到可以接受信息了,这里就直接开始写如何返回信息了,为了方便测试和学习,还是去百度下载一个tcp助手吧。后面我就不写关于命令行的测试了;
直接上代码了,都是基础。比较简单的内容;
package com.netty.nettys01;import io.netty.buffer.ByteBuf;import io.netty.buffer.Unpooled;import io.netty.channel.ChannelHandlerAdapter;import io.netty.channel.ChannelHandlerContext;import io.netty.util.CharsetUtil;import io.netty.util.ReferenceCountUtil;public class DiscardServerHandler extends ChannelHandlerAdapter { ???/** ????* 这里我们覆盖了chanelRead()事件处理方法。 每当从客户端收到新的数据时, 这个方法会在收到消息时被调用, ????* 这个例子中,收到的消息的类型是ByteBuf ????* ????* @param ctx ????* ???????????通道处理的上下文信息 ????* @param msg ????* ???????????接收的消息 ????*/ ???@Override ???public void channelRead(ChannelHandlerContext ctx, Object msg) { ???????try { ???????????ByteBuf in = (ByteBuf) msg; ???????????// 打印客户端输入,传输过来的的字符 ??????????String msg2 = in.toString(CharsetUtil.UTF_8); ???????????System.out.print(msg2); ???????????String rmsg="66666";//返回的信息 ??????????ByteBuf in2= Unpooled.copiedBuffer(rmsg.getBytes());//进行处理 ???????????ctx.writeAndFlush(in2);//返回信息 ???????} finally { ???????????/** ????????????* ByteBuf是一个引用计数对象,这个对象必须显示地调用release()方法来释放。 ????????????* 请记住处理器的职责是释放所有传递到处理器的引用计数对象。 ????????????*/ ???????????// 抛弃收到的数据 ???????????ReferenceCountUtil.release(msg); ???????} ???} ???/*** ????* 这个方法会在发生异常时触发 ????* ????* @param ctx ????* @param cause ????*/ ???@Override ???public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { ???????/** ????????* exceptionCaught() 事件处理方法是当出现 Throwable 对象才会被调用,即当 Netty 由于 IO ????????* 错误或者处理器在处理事件时抛出的异常时。在大部分情况下,捕获的异常应该被记录下来 并且把关联的 channel ????????* 给关闭掉。然而这个方法的处理方式会在遇到不同异常的情况下有不 同的实现,比如你可能想在关闭连接之前发送一个错误码的响应消息。 ????????*/ ???????// 出现异常就关闭 ???????System.out.println("发生异常了----------------------------"); ???????cause.printStackTrace(); ???????ctx.close(); ???}}
从上面的代码可以看出 ChannelHandlerContext ctx 这个类就是用来返回信息的,不管是接受到信息以后,还是发生异常以后,都存在这个对象;
后面测试的就不写了,和上一篇一样的,发送信息了以后就会收到返回的信息了。测试方法也在这一篇netty01里面,可以点进去看看就知道了。
netty02(接受消息以后进行返回)
原文地址:https://www.cnblogs.com/qq376324789/p/9924617.html