分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

netty02(接受消息以后进行返回)

发布时间:2023-09-06 02:21责任编辑:蔡小小关键词:暂无标签

     到这里接着上一篇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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved