809 协议相关

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

809 协议

需求:

设计思路

实现思路分析

1.概念

809协议是中国公安部制定的一项标准,全称为《公安视频监控联网系统技术要求及测试方法》,主要用于规范和指导城市公安视频监控联网系统的建设和运营。该协议规定了视频监控设备、网络设备、服务器和客户端等各个方面的技术要求,以确保监控系统的可靠性、稳定性和安全性。

809协议规定了视频监控设备需要满足高清、高效、低延迟等要求,网络设备需要具有高速传输、可靠性、稳定性和安全性等特点,服务器和客户端需要支持高效的数据存储和管理,并提供完善的数据查询、回放和管理功能。该协议还包括了视频监控系统的安全要求,例如数据加密和传输安全、设备防攻击和防病毒等。

通过实施809协议,可以有效提升城市公安视频监控联网系统的建设和运营水平,提高公安工作的效率和精度,为社会安全稳定做出贡献。

2.业务流程

业务流程图:

在这里插入图片描述

2首先下级平台上报上级平台
2.1 下级平台发送0x1001 到具体的上级平台。
2.2 上级平台传送到0x1002到下级平台
2.3 从链路如下:
上级平台发送Ox9001 到下级平台。
下级平台发送Ox9002 到上级平台。

数据交换格式:

  1. 客户端连接:
    现在的格式是:vo,javaBean 放到缓冲区,变成十六进制的,经过解码转义之后还是十六进制的数据,内部传输的都是十六进制的。

在这里能转换成对应的vo 就行行了,即是将十六进制转成Message即可。

3.详细过程

1.原包:
5B 00 00 00 92 00 00 06 82 94 00 01 33 EF B8 01 00 00 00 00 00 27 0F D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 02 94 01 00 00 00 5C 01 00 02 00 00 00 00 (5A 01) AC 3F 40 12 3F FA A1 00 00 00 00 (5A 01) AC 4D 50 03 73 6D 61 6C 6C 63 68 69 00 00 00 00 00 00 00 00 31 32 33 34 35 36 37 38 39 30 31 00 00 00 00 00 00 00 00 00 31 32 33 34 35 36 40 71 71 2E 63 6F 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BA D8 5D

2.进行反转义
5A 01 ->5B
5A 02 ->5A
5E 01 ->5D
5E 02 ->5E
反转义后
5B 00 00 00 92 00 00 06 82 94 00 01 33 EF B8 01 00 00 00 00 00 27 0F D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 02 94 01 00 00 00 5C 01 00 02 00 00 00 00 5B AC 3F 40 12 3F FA A1 00 00 00 00 5B AC 4D 50 03 73 6D 61 6C 6C 63 68 69 00 00 00 00 00 00 00 00 31 32 33 34 35 36 37 38 39 30 31 00 00 00 00 00 00 00 00 00 31 32 33 34 35 36 40 71 71 2E 63 6F 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 BA D8 5D

3.拆解
5B --头标识
00 00 00 92 --数据头->数据长度
00 00 06 82 --数据头->报文序列号
94 00 --数据头->业务数据类型
01 33 EF B8 --数据头->下级平台接入码,上级平台给下级平台分配唯一标识码
01 00 00 --数据头->协议版本号标识
00 --数据头->报文加密标识位
00 00 27 0F --数据头->数据加密的密匙
D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 --数据体->车牌号
02 --数据体->车辆颜色
94 01 --数据体->子业务类型标识
00 00 00 5C --数据体->后续数据长度
01 --子数据体->报警信息来源
00 02 --子数据体->报警类型
00 00 00 00 5B AC 3F 40 --子数据体->报警时间UTCDateTime
12 3F FA A1 --子数据体->报警督办ID
00 00 00 00 5B AC 4D 50 --子数据体->督办截止时间
03 --子数据体->督办级别
73 6D 61 6C 6C 63 68 69 00 00 00 00 00 00 00 00 --子数据体->督办人
31 32 33 34 35 36 37 38 39 30 31 00 00 00 00 00 00 00 00 00 --子数据体->督办联系电话
31 32 33 34 35 36 40 71 71 2E 63 6F 6D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 --子数据体->督办联系电子邮件
BA D8 --CRC校验码
5D --尾标识

4.相关过程

参考资料

1.暂无

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!同时,期望各位大佬的批评指正~

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是一个简单的C#代码示例,可用于JT809协议数据的解析和生成: ```csharp using System; using System.IO; using System.Text; namespace JT809Protocol { public class JT809Message { public uint MsgLength { get; set; } public uint MsgSn { get; set; } public ushort MsgId { get; set; } public byte[] MsgBody { get; set; } public uint CRC32 { get; set; } public void Serialize(Stream stream) { BinaryWriter writer = new BinaryWriter(stream); writer.Write(MsgLength); writer.Write(MsgSn); writer.Write(MsgId); writer.Write(MsgBody); writer.Write(CRC32); } public void Deserialize(Stream stream) { BinaryReader reader = new BinaryReader(stream); MsgLength = reader.ReadUInt32(); MsgSn = reader.ReadUInt32(); MsgId = reader.ReadUInt16(); MsgBody = reader.ReadBytes((int)(MsgLength - 12)); CRC32 = reader.ReadUInt32(); } public static uint CalculateCRC32(byte[] data, uint offset, uint length) { uint[] table = new uint[] { 0x00000000, 0x04C11DB7, 0x09823B6E, 0x0D4326D9, 0x130476DC, 0x17C56B6B, 0x1A864DB2, 0x1E475005, // 略... 0xF40E3585, 0xF060CF14, 0xFED41B76, 0xFA0F3D63, 0xFDBAACF8, 0xFFCCBBE1, 0xFF95C5F4, 0xFF2A7604, }; uint crc = 0xFFFFFFFF; for (uint i = offset; i < offset + length; i++) { crc = (crc << 8) ^ table[((crc >> 24) & 0xFF) ^ data[i]]; } return ~crc; } } public class JT809Serializer { public static byte[] Serialize(JT809Message message) { MemoryStream stream = new MemoryStream(); message.Serialize(stream); byte[] data = stream.ToArray(); message.CRC32 = JT809Message.CalculateCRC32(data, 0, (uint)data.Length); stream.Seek(0, SeekOrigin.Begin); message.Serialize(stream); return stream.ToArray(); } public static JT809Message Deserialize(byte[] data) { JT809Message message = new JT809Message(); MemoryStream stream = new MemoryStream(data); message.Deserialize(stream); uint crc = JT809Message.CalculateCRC32(data, 0, (uint)data.Length - 4); if (crc != message.CRC32) { throw new Exception("CRC32 check failed"); } return message; } } } ``` 上述代码中,`JT809Message`类表示一个JT809消息,包括消息头和消息体。`Serialize`方法用于将消息序列化为字节数组,`Deserialize`方法用于从字节数组反序列化出消息。`CalculateCRC32`方法用于计算CRC32校验码。 `JT809Serializer`类是一个辅助类,用于将消息序列化为字节数组和从字节数组反序列化出消息。它使用`JT809Message`类的`Serialize`和`Deserialize`方法实现这些功能,并在序列化时计算CRC32校验码,反序列化时验证CRC32校验码是否正确。 请注意,这只是一个简单的示例代码,实际使用中可能需要根据具体的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

执于代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值