JJC001 2022-11-26 14:40
浏览 11
已结题

netty server如何同时处理16进制与字符串传输

问题遇到的现象和发生背景

netty server怎么判断客户端传来的是hex(16进制)还是plain(字符串)?
背景:有一个netty server用于接入物联网设备的tcp连接,有些设备使用字符串传输,有些设备使用16进制传输,公司目前的做法是netty server根据设备端口号来判断接收的数据到底以什么方式显示。我想问下还有没有其他的办法了?

用代码块功能插入代码,请勿粘贴截图
public class TestPro extends StringDecoder {
    public static AttributeKey<String> t1 = AttributeKey.newInstance("type");

    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {

        if (ctx.channel().attr(t1).get().equals("hex")) {
            String HEXES = "0123456789ABCDEF";
            byte[] req = new byte[msg.readableBytes()];
            msg.readBytes(req);
            final StringBuilder hex = new StringBuilder(2 * req.length);

            for (int i = 0; i < req.length; i++) {
                byte b = req[i];
                hex.append(HEXES.charAt((b & 0xF0) >> 4))
                        .append(HEXES.charAt((b & 0x0F)));
            }
            out.add(hex.toString());
        } else {
            super.decode(ctx, msg, out);
        }
    }
}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月4日
    • 创建了问题 11月26日

    悬赏问题

    • ¥100 set_link_state
    • ¥15 虚幻5 UE美术毛发渲染
    • ¥15 CVRP 图论 物流运输优化
    • ¥15 Tableau online 嵌入ppt失败
    • ¥100 支付宝网页转账系统不识别账号
    • ¥15 基于单片机的靶位控制系统
    • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
    • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
    • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
    • ¥15 手机接入宽带网线,如何释放宽带全部速度