Netty【UDP】服务器解析【自定义协议】
来源:互联网 发布:知乎 保险 编辑:程序博客网 时间:2024/05/22 10:34
最近在做RFID定位的项目,为了方便自主开发2.4G读写器和数据服务器。服务端采用Netty。
协议描述:
1. 标签ID数据上传:读写器设备按设定时间频率更新读到的所有电子标签的ID号,并向上位机主动发送数据(用UDP模式)
设备ID(2Byte = 0-65535) + 'A' + Sn(1Byte = 0-255) + 标签数(1Byte = n) + 标签1(3Byte = 0x00,0x2A,0x3B)+ 标签2(3Byte = 0x01,0x2b,0x3c)+....+标签n(3Byte = 0x00,0x23,0x6B) + CheckSum(1Byte)
package com.netty;import java.net.InetSocketAddress;import org.jboss.netty.bootstrap.ConnectionlessBootstrap;import org.jboss.netty.channel.ChannelPipeline;import org.jboss.netty.channel.ChannelPipelineFactory;import org.jboss.netty.channel.Channels;import org.jboss.netty.channel.socket.DatagramChannelFactory;import org.jboss.netty.channel.socket.nio.NioDatagramChannelFactory;public class UdpServer {private ConnectionlessBootstrap udpBootstrap;public UdpServer(int port){DatagramChannelFactory channelFactory = new NioDatagramChannelFactory();udpBootstrap = new ConnectionlessBootstrap(channelFactory);udpBootstrap.setPipelineFactory(new ChannelPipelineFactory() {public ChannelPipeline getPipeline() throws Exception {return Channels.pipeline(new UdpEventHandler());}});udpBootstrap.bind(new InetSocketAddress(port));}public static void main(String[] args) {new UdpServer(32500);}}
package com.netty;import java.nio.ByteBuffer;import org.jboss.netty.buffer.ChannelBuffer;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.ExceptionEvent;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelUpstreamHandler;public class UdpEventHandler extends SimpleChannelUpstreamHandler {@Overridepublic void exceptionCaught(ChannelHandlerContext arg0, ExceptionEvent arg1)throws Exception {super.exceptionCaught(arg0, arg1);}private ChannelBuffer buffer;private ByteBuffer byteBuffer;private byte[] arrayByte;private int deviceID ;//设备IDprivate int cmd;//命令类型private int sn;private int count ;//标签数private int tag;//标签号private int checkSum ;//校验和private int tagType;//标签类型@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {super.messageReceived(ctx, e);buffer = (ChannelBuffer)e.getMessage();byteBuffer = buffer.copy().toByteBuffer();arrayByte = byteBuffer.array();if( !(arrayByte!= null && arrayByte.length >=14) ){return ;}deviceID = toInt(arrayByte[6]);deviceID = (deviceID<<8) + toInt(arrayByte[7]);cmd = toInt(arrayByte[8]);sn = toInt(arrayByte[9]);count = toInt(arrayByte[10]);if((char)cmd == 'A' ){if(count == 0 )return ;checkSum = toInt(arrayByte[11+(count*3)]);//上报标签for(int i=0;i<count;i++){tagType = toInt(arrayByte[11+(i*3)]);tag = toInt(arrayByte[11+(i*3)+1]);tag = (tag<<8) +toInt(arrayByte[11+(i*3)+2]);//插入数据库}}else if ((char)cmd == 'B'){//无标签上报心跳包 }}//取正 private int toInt(byte b){ if(b >= 0) return (int)b; else return (int)(b + 256); } }
- Netty【UDP】服务器解析【自定义协议】
- Netty自定义协议解析原理与应用
- Netty自定义协议开发
- netty自定义协议解码
- MessageToMessageDecoder netty自定义协议
- netty自定义协议
- 《netty权威指南》12 UDP协议开发
- Netty 权威指南之UDP 协议开发
- Netty的入门-UDP协议开发
- UDP协议解析
- UDP-RTP协议解析
- netty对http协议解析原理解析
- Netty 对 http协议 解析原理解析
- netty对http协议解析原理解析
- netty对http协议解析原理解析
- UDP协议疑难杂症全景解析
- UDP协议疑难杂症全景解析
- UDP协议疑难杂症全景解析
- 编写一个程序,设计一个Cdate类,它应该满足下面的条件:(1).用这样的格式输出日期:日-月-年;(2).输出在当前日期上加两天后的日期;
- 幸福
- 为什么匿名内部类参数必须为final类型
- CPU、内存、总线
- JAVA农历转公历,公历转农历算法
- Netty【UDP】服务器解析【自定义协议】
- 实战设计模式之桥接模式
- 那些年曾经看过的电影之八零年代
- Android Fragment应用实战,使用碎片向ActivityGroup说再见
- 获得手机号码
- 结构体和文件操作
- 山寨手机(尼采手机)如何连接到eclipse
- 系统架构领域的一些学习材料 by林仕鼎
- 如何设置eclipse不同的workspace共享配置