宁波GPS监管平台数据接入协议20091208.doc_第1页
宁波GPS监管平台数据接入协议20091208.doc_第2页
宁波GPS监管平台数据接入协议20091208.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

宁波GPS监管平台数据接入协议一、 协议概述1. 底层通讯协议概述标准协议以TCP/IP作为低层通讯承载。宁波平台提供服务器平台功能,在TCP上进行监听,端口号可配置;其他地市系统平台以工作站方式(下称客户端平台)访问服务器平台,客户端平台与服务器平台通过标准协议进行信息交互时,采用长连接方式。所谓长连接,指在一个TCP 连接上可以连续发送多个数据包,在TCP 连接保持期间,如果没有数据包发送,需要双方发链路检测包以维持此连接。图1-1 GPS协议栈2. 业务消息种类概述目前客户端平台需要实现的消息主要有:1) 客户端平台登录2) 车辆位置汇报3) 车辆基本信息4) 连接检测消息5) 车辆基本信息注销6) 照片信息上传消息7) 视频信息上传消息(系统暂不支持)3. 消息格式规约概述按照指令数据类型的不同,消息分成二进制消息和文本消息两种。除照片以及视频消息上传外,其他消息组成为文本消息,在发送消息时需将字符串指令按UTF-8编码将字符串转换成byte数组,在该byte数组前附加两个字节(big endian)描述后续字节数。在实现具体的消息的时候,每个消息内部的各个字段信息需要以“,”进行分割;字段内部如果还存在具体信息,需要以$进行分割,每个字段的基本单元需要信息进行urlencode编码。图片、视频等二进制数据以二进制消息的方式传输。客户端平台通过Socket方式连接到二进制通讯端口,采用字节的方式传输二进制数据。字节编码顺序为Big_endian协议请见协议约定部分二、 业务流程1. 平台登录客户端平台上行1号登录消息,服务器平台会下行1号登录验证反馈消息。2. 车辆位置汇报客户端平台上行3号位置汇报消息,如果服务器平台发现目前数据库中不存在该车辆的基本信息,下行4号请求车辆基本信息消息,此时客户端平台需要上行6号车辆的基本信息消息。3. 车辆基本信息上报如果服务器平台在客户端平台上报的车辆位置汇报中发现未入库的车辆,则会向客户端平台请求车辆基本信息,此时客户端平台需上行6号消息上传该车辆基本信息。4. 车辆基本信息注销如果车辆注销而发生信息变动,客户端平台可通过上行22号消息进行车辆信息的注销。5. 连接测试(心跳)客户端平台可定时发送上行7号消息检测与服务器之间的连接情况是否正常,若情况正常,服务器将回复下行5号消息回复连接测试。6. 拍照信息上传客户端平台可向服务器平台的二进制端口上传照片,实现二进制端口的上行1号消息。7. 视频信息上传(系统暂未支持)服务器平台下发视频信息查询指令,即下行12号消息,客户端平台接收到后向服务器平台的二进制端口上传视频信息,实现二进制端口的上行2号消息8. 注意事项1) 请详细查看客户端平台车辆终端统一编码的格式和车辆运营类型的约定2) 请保证转发程序的自动重新连接功能,如果连接出现异常则断开重连,需要重新发送登录消息(上行1号消息)三、 协议约定1. 车型编号约定车辆类型车辆类型编号省际客运班车11市际客运班车12旅游客运车辆13县际客运班车14危险货物运输车辆20重型载货汽车31半挂牵引车32教练车42公交车43出租汽车41其他992. 地市编号约定浙江省各设区市编号宁波103. 终端唯一编号约定位数参数描述111代表GPRS;2代表CDMA;4代表SMS;9代表其他210 代表浙江省所属省的两位数字编码(浙江省编码为10)310代表宁波地市的两位数字编码(具体编码约定见上表)40001客户端平台编码四位数字表示客户端平台编码554321客户端平台内部终端编号,支持最长20位数字 例:“11010000154321”代表:GPRS浙江省宁波市0001(客户端平台)54321内部编号四、 协议指令集1. 客户端平台服务器平台(上行)1) 客户端平台登录消息:1号消息位数参数描述1消息号 12登陆账号3yyyyMMddHHmmss4密码 md5加密例如:1,0001,20090904090020, B8C37E33DEFDE51CF91E1E03E51657DA2) 车辆位置汇报:3号消息位数参数描述1消息号 32终端唯一编号3定位时间 (精确到秒)yyyyMMddHHmmss4经度(经纬度为带小数的双精度数字的度数数值)5纬度6速度 km/h(保留2位小数点)7高度单位:m8状态: 数字,具体含义再定,默认是09空重车:0-空车;1-重车。出租车才有此要求,其他车辆用0即例如:3,11010000154321,20070308111720,119.256001,26.135256,80,10,0,03) 车辆基本信息:6号消息 触发条件:n 收到节点发送到服务器平台的4号消息则返回该消息n 如果新增或修改车辆信息时要将车辆信息传到节点服务器注:车辆信息必填字段为终端唯一编号、车牌号、车辆类型编号、工作单位(工作单位为车辆所属企业名称),位数参数描述1消息号 62车辆信息;多个车辆信息以“,”隔开;每个车辆信息包括:终端唯一编号$车牌号$ 车辆类型编号$车载终端电话$是否支持拍照$车主姓名$联系电话$车主性别$身份证号码$车主email$工作单位$通讯地址$邮政编码$第一联系人姓名$第一联系人电话$第二联系人姓名$第二联系人电话$服务开始时间$服务到期时间$车辆吨位/座位数$道路运输证号$运营线路例如:原始消息:6,11010005616310$浙BBV385$410$ $ $ $ $ $宁波测试车辆机构 $ $ $ $ $ $ $ $ $ $ $ 各字段均以urlencode编码后消息为:6,11010005616310$%D5%E3BBV385$410$+$+$+$+$+$%C4%FE%B2%A8%B2%E2%CA%D4%B3%B5%C1%BE%BB%FA%B9%B9$+$+$+$+$+$+$+$+$+$+$+ 4) 车辆基本信息注销:22号消息位数参数描述1消息号 222终端唯一编号3车牌号码例如:22,11010005616310,%D5%E3BBV3855) 连接检测: 7号消息位数参数描述1消息号 7(检测连接,每隔10分钟以内就需要发送一次,若监控平台检测不到,会主动断开与工作站系统的连接。服务器会返回5号消息)例如:76) 照片上传:二进制端口1号消息备注终端上传的图片以字节数组形式发给服务器平台,每条消息代表一个图片。位数值位数备注1消息 ID1消息id,值为: 12length4消息总长度,包括消息id和length本身3CarId8上传该图片的终端编号(请见下方注释)4CameraId1拍照摄像头编号5Year1上传该图片的年6Month1上传该图片的月7Day1上传该图片的日8hour1上传该图片的小时9minute1上传该图片的分钟10second1上传该图片的秒钟11图片ID2图片的编号12图片格式1图片格式,1:JPG,2:GIF 13-n图片contentn图片的内容附:图片格式表格式编码图片格式1JPG2GIF3TIF4BMP5TGA6其他注:其中,CarId为8字节终端编号,具体格式为终端唯一编码去除第一个GPS通信方式后的一串数字,如原先终端编码为11010005616310,那么在此的carid应该为10100056163107) 视频信息上传,二进制端口2号消息备注终端上传的视频以字节数组形式发给服务器平台,每条消息代表一个视频信息。位数值位数备注1消息 ID1消息id,值为: 22length8消息总长度,包括消息id和length本身3CarId8上传该视频信息的终端编号(同照片上传中carid定义)4CameraId1视频摄像头编号5Year1上传该图片的年6Month1上传该图片的月7Day1上传该图片的日8hour1上传该图片的小时9minute1上传该图片的分钟10second1上传该图片的秒钟13-n视频内容n视频内容注:该消息系统暂未支持2. 服务器平台客户端平台(下行)1) 节点验证结果反馈: 1号消息位数参数描述1消息号 12验证结果 通过1其他 0例如:成功:1,1失败:1,02) 获取接入系统的详细车辆信息: 4号消息位数参数描述1消息号 42终端唯一编号。多个终端唯一编号用逗号隔开;如果直接为0表示全部的车的车辆信息例如:4,110100056163103) 检测连接反馈消息:5号消息位数参数描述1消息号 5(返回连接测试结果)例如:54) 视频信息拍摄消息:12号消息位数参数描述1消息号 122终端唯一编号。3摄像头编号4拍摄开始时间(yyyyMMddHHmmss)5拍摄结束时间(yyyyMMddHHmmss)注:该消息系统暂未支持五、 附录1. 编码注意事项消息组成为文本消息,文本消息传输数据格式均为字符串,在发送消息时需将字符串指令按UTF-8编码将字符串转换成byte数组,在该byte数组前附加两个字节(big endian)描述后续字节数。在实现具体消息时,字符串内各参数之间以半角的逗号(,)为分割符号;字段内部如果还存在具体信息,需要以$进行分割,每个字段内部的基本单元需要信息进行urlencode编码。一条典型的指令为:1,1001,20070904090020, B8C37E33DEFDE51CF91E1E03E51657DA。例如:编码前的字符串为:宁波 运管局编码后字符串为:%C4%FE%B2%A8+%D4%CB%B9%DC%BE%D6,其中宁波被编码成%C4%FE%B2%A8,空格编码成+,运管局编码成为%D4%CB%B9%DC%BE%D62. 指令编码步骤1) 编写字符串形式的指令。如BIND命令指令为:1,1001,20070308110201,253962977E257D70B8C9B0EFC92AF5162) 将字符串指令按UTF-8编码将字符串转换成byte数组,在该byte数组前附加两个字节(big endian)描述后续字节数;(以十进制显示示例)BIND指令转换成byte数组后如下:byte buf =0, 54, 49, 44, 49, 48, 48, 49, 44, 50, 48, 48, 55, 48, 51, 48, 56, 49, 49, 48, 50, 48, 49, 44, 50, 53, 51, 57, 54, 50, 57, 55, 55, 69, 50, 53, 55, 68, 55, 48, 66, 56, 67, 57, 66, 48, 69, 70, 67, 57, 50, 65, 70, 53, 49, 543. 指令解码步骤1) 根据字节流的前两个字节算出后面应该读取多少个字节,然后把后面的字节收入一个字节数组。2) 由于中文等增补字符已经经过了URLEncode,所以都是拉丁字符集,可以直接将指令的byte数组数据按utf-8编码转换成字符串。3) 按照协议将URLEncode过的中文部分解码出来。4. 编码和解码例子1)编码例子(位置汇报)位置汇报3终端编号,定位时间,经度,纬度,速度,高度,状态,空重车消息原文为:3,11010000154321,20070308111720,119.256001,26.135256,80,10,0,0该消息用UTF-8编码(和ASCII形式编码相同)后的二进制如下:51, 44, 49, 49, 48, 49, 48, 48, 48, 48, 49, 53, 52, 51, 50, 49, 44, 50, 48, 48, 55, 48, 51, 48, 56, 49, 49, 49, 55, 50, 48, 44, 49, 49, 57, 46, 50, 53, 54, 48, 48, 49, 44, 50, 54, 46, 49, 51, 53, 50, 53, 54, 44, 56, 48, 44, 49, 48, 44, 48, 44, 48长度为62,在头上加上两个字节长度后变成:0, 62, 51, 44, 49, 49, 48, 49, 48, 48, 48, 48, 49, 53, 52, 51, 50, 49, 44, 50, 48, 48, 55, 48, 51, 48, 56, 49, 49, 49, 55, 50, 48, 44, 49, 49, 57, 46, 50, 53, 54, 48, 48, 49, 44, 50, 54, 46, 49, 51, 53, 50, 53, 54, 44, 56, 48, 44, 49, 48, 44, 48, 44, 482)解码例子(登陆验证通过)BINDRESP1验证结果若登陆验证通过,则服务器端回复的消息文本应该为:1,1客户端平台收到的字节数组应为:0, 3, 49, 44, 49 A. 首先解析头两个字节:0,3,可以分析出本条消息正文应该有3个字节的长度。B. 然后用长度为3的数组来接收后面的5个字节:得到49, 44, 49C. 根据UTF-8的编码规则进行解码,事实上由于消息的各组成部分经过了URLEncode,所以这里都是ASCII字符,可以直接转换成字符串:1,1 D. 经过解析这是一条BINDRESP消息:验证通过。5. URL Encode方法和UTF-8编码规范1) URL Encode方法:字母数字字符 a 到 z、A 到 Z 和 0 到 9 保持不变。 特殊字符 .、-、* 和 _ 保持不变。 空格字符 转换为一个加号 +。 所有其他字符传输都是不安全的,因此首先使用一些编码机制将它们转换为一个或多个字节。然后每个字节用一个包含 3 个字符的字符串 %xy 表示,其中 xy 为该字节的两位十六进制表示形式。这里我们采用GB2312来编码。2) UTF-8编码规范:Unicode设计是作为一种固定宽度的 16 位字符编码。编码字符集是一个字符集,它为每一个字符分配一个唯一数字。Unicode 标准的核心是一个编码字符集, Unicode 标准始终使用十六进制数字,字符A的编码为“U+0041”。有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF。Unicode 4.0 将字符分配给一百多万个代码点中的 96,382 代码点。增补字符是代码点在 U+10000 至 U+10FFFF 范围之间的字符,也就是那些使用原始的 Unicode 的 16 位设计无法表示的字符。从 U+0000 至 U+FFFF 之间的字符集有时候被称为基本多语言面 Basic Multilingual Plane BMP。因此,每一个 Unicode 字符要么属于 BMP,要么属于增补字符。UTF-8 使用一至四个字节的序列对编码 Unicode 代码点进行编码。U+0000 至 U+007F 使用一个字节编码,U+0080 至 U+07FF 使用两个字节,U+0800 至 U+FFFF 使用三个字节,而 U+10000 至 U+10FFFF 使用四个字节。UTF-8 设计原理为:字节值 0x00 至 0x7F 始终表示代码点 U+0000 至 U+007F(Basic Latin 字符子集,它对应 ASCII 字符集)。这些字节值永远不会表示其他代码点,这一特性使 UTF-8 可以很方便地在软件中将特殊的含义赋予某些 ASCII 字符。以下是 UTF-8 的模板 0x0000 - 0x007F 用一个字节表示 0xxxxxxx 0x0080 - 0x07FF 用两个字节表示 110xxxxx 10xxxxxx 0x0800 - 0xFFFF 用三个字节表示 1110xxxx 10xxxxxx 10xxxxxx 举个例子,如果你遇到了 11100110 10110001 10001001 01000001 这样的字节流,首先你看第一个字节以 1110 开头,即读 3 个字节并按模板提取得到 0110 110001 001001 去除模板标志然后读取四个字节即 0x6c49 ,查 unicode 编码表就是 汉 字 , 而最后一个以 0 开头就一定是一个字节了, 0x0041 ,也就是 A 。6. URL Encode方法和UTF-8编码解码例子1) URLCode原则:数字和字母不变,空格变为+号,其他被编码成%加上他们的ascii的十六进制,规律是这样的。 比如汉字“啊”字 Ascii的十六进制是B0A1,则编码后为%B0%A1(每个字节前加个%)。/* URLCode.h*/#pragma once#include using namespace std;class CURLCode public:CURLCode();virtual CURLCode();static string Encode(const char* lpszData);static string Decode(string inTmp);private:inline static unsigned char toHex(const unsigned char &x) return x 9 ? x + 55: x + 48; inline static unsigned char fromHex(const unsigned char &x) return x 64 ? x - 55 : x - 48; ;/* URLCode.cpp*/#include URLCode.hstring CURLCode:Encode(const char* lpszData)string strResult = ;unsigned char* pInTmp = (unsigned char*)lpszData;/ do encodingwhile (*pInTmp) if(isalnum(*pInTmp) strResult += *pInTmp; else if(isspace(*pInTmp) strResult += +; else strResult += %; strResult += toHex(*pInTmp4); strResult += toHex(*pInTmp%16); pInTmp+;return strResult;string CURLCode:Decode(string inTmp)string strResult = ;int inlen = inTmp.length();for(int i=0;iinlen;i+) if(inTmp.at(i)=%) i+; char c = from

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论