我用mina框架定义服务端,当客户端给我发数据包后我要先反馈数据包,在解析数据包,在反馈数据包
@Gaischen 你好,想跟你请教个问题:
这个我要怎么写?希望您能帮我一下!!
客户端发给我,我就要给他反馈,我应该怎么写?我解析数据成功后,我要怎么再一次反馈给他数据包?
实时交通数据校验信息数据包(0x0A)格式如下:
序 号 字 段长 度(字 节 ) 解 释数 据 范 围( HEX)
1 数据包类型1 实时交通数据校验信息数据包0x0A
2 时间序号2
3 校验结果信息代码2
“实时交通数据校验信息数据包”( 0x0A)为定长数据包,包长为 5 个字节。
时间序号是 DSC 接收到的“实时交通数据包”( 0x01)的时间序号;当反馈数据正
确代码时,“校验结果信息代码 ”取值为“FF FF”;当反馈数据错误代码时 ,“校验
结果信息代码”将取值为发现的第一个错误的错误代码(错误代码见下表)。
示例数据(包括:帧头、包长、数据包内容、CRC 校验、帧尾):
如时间序号为 15 的“实时交通数据包”数据格式正确,DSC 向 RD 回复:AA
AA 05 00 0A 0F 00 FF FF D4 A5 EE EE
public class TmsIoHandler extends IoHandlerAdapter{
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
System.out.println("session是"+session);
// TODO Auto-generated method stub
String addr=session.getRemoteAddress().toString(); // 示例值为 /127.0.0.1:50641
System.out.println(addr+"向本机服务发送内容:"+String.valueOf(CommUtils2.toHexString((byte[])message)));
logger.debug("设备"+session.getAttribute("deviceId")+"("+addr+")接收到信息:"+String.valueOf(CommUtils2.toHexString((byte[])message)));
TrRecData jkVdRecData = new TrRecData();
// System.out.println("jkVdRecData是"+jkVdRecData);
jkVdRecData.setDeviceId(TrReciveTask.this.exchangeCfg.get().getDeviceId());
TrReciveTask.this.recService.saveData(jkVdRecData, (byte[])message);
session.setAttribute(jkVdRecData.getSerialNumber()+"FFFF");
session.close();
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
开两个线程,一个是不断socek轮询,如果有客户端发过来,就反馈,之后解析数据包,数据包成功了,就通知反馈线程,回馈客户端