问题遇到的现象和发生背景
netty server怎么判断客户端传来的是hex(16进制)还是plain(字符串)? 背景:有一个netty server用于接入物联网设备的tcp连接,有些设备使用字符串传输,有些设备使用16进制传输,公司目前的做法是netty server根据设备端口号来判断接收的数据到底以什么方式显示。我想问下还有没有其他的办法了?
用代码块功能插入代码,请勿粘贴截图
public class TestPro extends StringDecoder {
public static AttributeKey t1 = AttributeKey .new Instance("type" ) ;
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List 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 .char At((b & 0xF0) >> 4 ))
.append(HEXES .char At((b & 0x0F) ));
}
out.add(hex.to String() );
} else {
super.decode(ctx, msg, out);
}
}
}