首页 > 其他分享 >netty服务端加解密

netty服务端加解密

时间:2023-11-23 19:22:48浏览次数:35  
标签:netty pipeline 自定义 bytes 加解密 io import 服务端

参考链接:https://www.cnblogs.com/silyvin/articles/11827030.html

一、解密

1、自定义解密类

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.ByteToMessageDecoder;

import java.util.List;

//自定义解密
public class CustomDecoder extends ByteToMessageDecoder {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        byte [] bytes = new byte[in.readableBytes()];
        in.readBytes(bytes);
        byte [] encoded = Utils.decryp(bytes);; //自定义解密方法
        ByteBuf buf = Unpooled.wrappedBuffer(encoded);
        out.add(buf);
    }
}

 2、加入到pipeline中

ChannelPipeline pipeline = ch.pipeline();
 pipeline.addLast(new CustomDecoder());//解密操作

二、加密

1、自定义加密类

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;

public class HJ212MessageEncoder extends MessageToByteEncoder<HJ212PackBean> {

    @Override
    protected void encode(ChannelHandlerContext ctx, HJ212PackBean bean, ByteBuf byteBuf) throws Exception {

        String response = "";

        //自定义拼接回复内容response

        byte[] bytes=response.getBytes();
        bytes = Utils.encryp(bytes);//自定义加密方法
      
        ctx.writeAndFlush(Unpooled.copiedBuffer(bytes));
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
        logger.error("编码异常" + cause.getMessage());
        ctx.close();
    }
}

2、加入到pipeline

ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast(new HJ212MessageEncoder());

  

标签:netty,pipeline,自定义,bytes,加解密,io,import,服务端
From: https://www.cnblogs.com/webttt/p/17852289.html

相关文章

  • ftp服务端移植到aarch64-linux
    github搜索下载ftp源码包:https://github.com/dagwieers/vsftpd源码包中有INSTALL安装说明,本下涉及的操作依赖安装说明书写1.解压源码包不会的话建议百度。2.修改Makefile文件,并编译保证主机中已经有交叉编译工具,并且已经添加到环境变量中,修改Makefile中的CC变量,我是这样的:aa......
  • 计算机科学与技术之网络编程 Windows下VC6.0 网络SOCKET编程C语言实现(服务端)
    在VC6.0平台用C语言实现网络SOCKET通信一.在VC6.0平台创建Win32ConsoleApplication工程工程名称自拟(或输入firstSocket)添加新建项文件C++SourceFile 文件名自拟,后缀.c(如firstSocket.c)在firstSocket.c加入头文件#include<winsock2.h>链接动态库#pragmacomment(l......
  • Netty - ChannelGroup 和 ArrayList 的区别
    一、Netty-ChannelGroup和ArrayList有什么区别?我正在使用Netty4.x,我想知道以下:ChannelGroup和ArrayList之间有什么区别?ChannelGroupchannels=newDefaultChannelGroup(GlobalEventExecutor.INSTANCE);和ArrayList<Channel>channels=newArrayList<>();二、......
  • 用Netty实现一个简单全双工通信
    用Netty实现一个简单全双工通信​ 如题,需要注意在ByteBuf使用的过程中要使用buf.retain()保证buf引用计数大于0,才能够正常使用否则会报异常,原因是pipeline上的handler都是使用NIO线程执行的,因此使用buf的handler和tailhandler(最后调用bufrelease的handler)是不同的线程,因此是异......
  • Netty-操作篇
    服务端创建步骤步骤一:创建ServerBootstrap实例。步骤二:设置并绑定Reactor线程池。步骤三:设置并绑定服务端Channel。步骤四:链路建立的时候创建并初始化ChannelPipeline(非必须)。用于处理网络事件:1.链路注册、激活、断开、发生异常2.接收到请求消息3.请求消息接收并处理完毕......
  • Netty-基础篇(4)
    不使用Java原生NIO编程的原因1、NIO的类库和API复杂,使用麻烦2、需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程3、可靠性能力补齐,工作量和难度都非常大。例如客户端面临断线重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题。4、JDKNIO的BUG,例如臭......
  • Socket支持下的点对点通信的实现(服务端与客户端注释)
    服务端程序importjava.awt.*;importjava.awt.event.*;importjava.io.*;importjava.net.*;importjavax.swing.*;publicclassServerextendsJFrameimplementsActionListener{ ServerSocketss=null;//ServerSocket对象 Sockets=null;//Socket对象 pr......
  • 奇迹MU服务端:角色属性点计算公式
    奇迹MU各职业出生送点,可以说是每个搭建用户最直接也是最关心的问题,因为该点数涉及到角色的总点数,我们根据商业服务端的内容,给顾客一个参考公式,你可以根据这个参考公式,去计算你的角色在满级后可获得多少点数,以保障游戏的平衡。每个角色出身送点,都会有所倾斜,所以,我们以实际案例作为......
  • Netty源码学习4——服务端是处理新连接的&netty的reactor模式
    系列文章目录和关于我零丶引入在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel,ChannelHandler,ChannelPipeline。这一篇将学习服务端是如何构建新的连接。一丶网络包接收流程当客户端发送的网络数据帧通过网......
  • Netty-基础篇(2)
    ByteBuf——Netty的数据容器概念:Netty提供的字节容器,可以对字节进行高效操作,包括读写、查找等。数据处理组件1.abstractclassByteBuf2.interfaceByteBufHolderByteBufAPI的优点:1.它可以被用户自定义的缓冲类型扩展2.通过内置的复合缓冲区类型实现了透明的零拷贝3.容量......