程序员子龙(Java面试 + Java学习) 程序员子龙(Java面试 + Java学习)
首页
学习指南
工具
开源项目
技术书籍

程序员子龙

Java 开发从业者
首页
学习指南
工具
开源项目
技术书籍
  • 基础

  • JVM

  • Spring

  • 并发编程

  • Mybatis

  • 网络编程

    • Netty 入门
    • Netty中的Option和ChildOption参数解析
    • Netty ByteBuf介绍
    • Netty 心跳机制
    • Kryo 的序列化和序列化
    • Netty粘包拆包
    • Netty 编解码器
    • 网络编程IO模式
    • Netty TCP长连接集群方案
    • 序列化和反序列化
    • 使用 UDP 的 Socket API 实现服务端
    • Netty向客户端发送及接收16进制数据
      • Spring Boot与Netty的完美结合:打造高性能网络通信
    • 数据库

    • 缓存

    • 设计模式

    • 分布式

    • 高并发

    • SpringBoot

    • SpringCloudAlibaba

    • Nginx

    • 面试

    • 生产问题

    • 系统设计

    • 消息中间件

    • Java
    • 网络编程
    程序员子龙
    2024-06-05
    目录

    Netty向客户端发送及接收16进制数据

    # 发送16进制数据

    Netty向客户端发送16进制数据时,需要将16进制字符串转为byte数组,再将byte数组写入到ByteBuf当中。

    public static byte[] hexString2Bytes(String src) {
    
    		int l = src.length() / 2;
    
    		byte[] ret = new byte[l];
    
    		for (int i = 0; i < l; i++) {
    
    			ret[i] = (byte) Integer.valueOf(src.substring(i * 2, i * 2 + 2), 16).byteValue();
    
    		}
    
    		return ret;
    
    	}
    
    
    public static String bytesToHexString(byte[] src) {
        StringBuilder stringBuilder = new StringBuilder("");
        if (src == null || src.length <= 0) {
            return null;
        }
        for (int i = 0; i < src.length; i++) {
            int v = src[i] & 0xFF;
            String hv = Integer.toHexString(v);
            if (hv.length() < 2) {
                stringBuilder.append(0);
            }
            stringBuilder.append(hv);
        }
        return stringBuilder.toString();
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
      public void channelRead(ChannelHandlerContext ctx, Object msg) {
           //Netty需要用ByteBuf传输
           ByteBuf bufff = Unpooled.buffer();
           //对接需要16进制
           bufff.writeBytes(ByteUtil.hexString2Bytes(m));
           ctx.writeAndFlush(bufff);
    
      }
          
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    # 接收16进制数据

    public void channelRead(ChannelHandlerContext ctx, Object msg) {
    
        ByteBuf in = (ByteBuf) msg;
        byte[] bs = new byte[in.readableBytes()];
        in.readBytes(bs);
        String order = ByteUtil.bytesToHexString(bs);
    	//todo 业务
    
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    Netty入门教程 (opens new window)

    # 总结

    使用Netty向客户端发送消息,如果是16进制报文,需要把16进制报文转换成byte数组,然后再写入到ByteBuf中。

    上次更新: 2024/06/14, 13:58:29
    使用 UDP 的 Socket API 实现服务端
    Spring Boot与Netty的完美结合:打造高性能网络通信

    ← 使用 UDP 的 Socket API 实现服务端 Spring Boot与Netty的完美结合:打造高性能网络通信→

    最近更新
    01
    一个注解,优雅的实现接口幂等性
    11-17
    02
    MySQL事务(超详细!!!)
    10-14
    03
    阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了
    10-09
    更多文章>
    Theme by Vdoing | Copyright © 2024-2024

        辽ICP备2023001503号-2

    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式