目录
一、JT/T 808标准简介
(一)概述
(二)协议特点
1、通信方式
2、鉴权机制
3、消息分类
(三)协议主要内容
1、位置信息
2、报警信息
3、车辆控制
4、数据转发
二、代码和解释
(一)代码和注释
(二)代码解释
1、概述
2、包含的目录和库
3、 宏定义
4、结构体定义
5、类定义(`CJT808NetSDKAPI`)
6、 静态变量和函数
7、成员变量
一、JT/T 808标准简介
(一)概述
JT/T 808标准,全称为《道路运输车辆卫星定位系统终端通讯协议及数据格式》,是由国家交通运输部发布的一个重要标准。这个标准主要规定了道路运输车辆卫星定位系统车载终端与监控平台之间的通信协议,包括信息交换的格式、数据的加密传输、报警信息的处理等,为车辆监管和服务提供了统一的数据通信标准,实现了信息的快速传输和远程控制。
(二)协议特点
1、通信方式
采用TCP协议作为通信协议,确保数据传输的稳定性和可靠性。
2、鉴权机制
车载终端与监控平台之间建立了鉴权机制,确保通信双方的身份合法性。
3、消息分类
将不同功能的消息分为不同的消息类别,如位置信息汇报、报警信息上传、车辆控制等,每个消息类别都有独特的消息ID。
(三)协议主要内容
1、位置信息
JT/T808标准定义了采集车辆位置信息的方式和格式,如经纬度、速度、方向等,并规定了位置信息上报的频率和条件。
2、报警信息
标准中定义了不同类型的报警信息,如超速报警、紧急报警等,并规定了报警信息的上报和处理方式。
3、车辆控制
标准还规定了终端对车辆某些功能的控制,如车辆远程锁车、解锁等。
4、数据转发
定义了终端之间的数据转发方式,允许终端之间相互通信。
二、代码和解释
(一)代码和注释
以下部分C++代码是JT808标准接入视频监控平台的SDK代码的头文件,列出了相关的函数,具体如下:
// JT808_NET_SDK_API_H__ header file
/*
* 定义CJT808NetSDKAPI类,该类用于处理JT808协议的网络通信。
* JT808是一种中国制定的车辆监控通信协议。
* 本类封装了网络通信的功能,包括登录/登出、数据接收/发送、线程处理等。
*/
#ifndef __JT808_NET_SDK_API_H__
#define __JT808_NET_SDK_API_H__
// 包含标准目录遍历类
#include <dirent.h>
// 引入STL中的map和list容器
#include <map>
#include <list>
// 引入自定义的NetSdkApp类,用于处理网络相关应用逻辑
#include "NetSdkApp.h"
// 引入类型定义
#include "TypeDef.h"
// 引入JT808协议相关定义
#include "jt808.h"
// 引入消息中心,用于处理各种消息
#include "MsgCenter.h"
// 引入线程相关的类和定义
#include "jthread.h"
#include "TransportMgr.h"
#include "TcpServer.h"
// 引入JT808常量定义
#include "JT808Constant.h"
// 可能引入JT808流处理类,但此行被注释掉了
// #include "JT808Stream.h"
// 使用命名空间jthread,以便于使用线程相关的类和函数
using namespace jthread;
// 定义最大缓存大小
#define JT808_CACHE_MAX_SIZE 1024*2
// 定义一个结构体用于缓存接收到的数据
typedef struct _Jt808RecvCache
{
// 指向缓存的指针
UINT8 *pCache;
// 缓存的最大大小
int iCacheSize;
// 当前缓存的大小
int iCurCacheSize;
// 结构体的构造函数,初始化成员变量
_Jt808RecvCache()
{
pCache = NULL;
iCacheSize = JT808_CACHE_MAX_SIZE;
iCurCacheSize = 0;
}
}Jt808RecvCache;
// CJT808NetSDKAPI类声明
class CJT808NetSDKAPI: public JThread, public CTransportMgr
{
public:
// 构造函数和析构函数
CJT808NetSDKAPI();
~CJT808NetSDKAPI();
// 初始化方法
void Init(void);
// 清理方法
void Unit(void);
// 登录方法,传入服务器IP和端口
long Login(const char *ip, UINT16 port);
// 登出方法,传入登录ID
void Logout(long Loginid);
// 线程执行方法
void* Thread(void);
// 线程退出方法
void ThreadQuit(void);
// 从网络接收数据的接口
int RecvDataFromNetwork(void);
// 向网络发送数据的接口
int SendDataToNetwork(void);
// 回调函数,处理接收到的数据包
int RecvPacketCallBack(CMySocket *pMySocket, const char *pData, int len, char *pSrcIP, UINT16 SrcPort);
// 回调函数,处理TCP套接字异常
int TcpSockExceptionCallBack(CMySocket *pMySocket);
// 处理接收到的消息
int MsgProcess(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, char* pBodyData, int BodyLen);
// 构造基础响应消息
int MsgBaseRsp(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, WORD MsgType, char * pRspData, int DataLen);
// 构造通用响应消息
int MsgCommonRsp(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, Jt808_Head *pHead, int RetCode);
// 构造基础请求消息
int MsgBaseReq(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, WORD MsgType, char * pRspData, int DataLen);
// 构造实时播放请求消息
int RealPlayReq(CMySocket *pMySocket, char *pSrcIP, UINT16 SrcPort, int ChanID);
private:
// 静态变量和互斥锁,用于管理JT808索引
static int jt808Index;
static CCritSec CritSec_jt808Index;
int JT808IndexAdd()
{
CAutoLock AutoLock(&CritSec_jt808Index);
return ++jt808Index;
}
private:
// 本地主机IP地址和端口,用于RTSP
char MyIpAddr[IPSTR_MAX_LEN+4];
UINT16 MyPort;
// 进程退出标志
bool ExitFlag;
// TCP服务器对象
CTcpServer *pTcpSvr;
// 暂时先使用一个
Jt808RecvCache *m_pStack;
};
// 文件结束宏
#endif /* INSTRUCTCONVERT_H_ */
(二)代码解释
1、概述
头文件定义了一个名为`CJT808NetSDKAPI`的比较复杂的类,该类继承了`JThread`和`CTransportMgr`两个接口。
该文件是用于处理JT808协议的网络通信的SDK(软件开发工具包),包括数据接收、发送、处理和缓存管理等。类也包含了许多网络通信的方法,如登录、登出、数据接收和发送等。它还包含了一些回调函数,用于处理接收到的数据包和TCP套接字异常。此外,它还定义了一些静态变量和互斥锁,用于管理JT808索引。
具体解释如下所述。
2、包含的目录和库
- `#include <dirent.h>`:用于目录操作。
- `#include <map>` 和 `#include <list>`:用于标准模板库中的映射和列表数据结构。
- `#include "NetSdkApp.h"`:可能是网络应用相关的头文件。
- `#include "TypeDef.h"`:包含类型定义的头文件。
- `#include "jt808.h"`:JT808协议相关的定义。
- `#include "MsgCenter.h"`:消息中心的定义。
- `#include "jthread.h"`:可能是自定义的线程类。
- `#include "TransportMgr.h"`:传输管理类的定义。
- `#include "TcpServer.h"`:TCP服务器类的定义。
- `#include "JT808Constant.h"`:JT808常量定义。
3、 宏定义
- `#define JT808_CACHE_MAX_SIZE 1024*2`:
定义了接收缓存的最大大小为2KB。
4、结构体定义
- `typedef struct _Jt808RecvCache Jt808RecvCache;`:
定义了一个用于接收缓存的结构体。
5、类定义(`CJT808NetSDKAPI`)
- 这个类继承了`JThread`和`CTransportMgr`,这意味着它具有线程功能和传输管理功能。
- 类中定义了多个成员函数,包括初始化、清理、登录、登出、接收网络数据、发送网络数据等。
- 还有回调函数,如接收数据包回调和TCP套接字异常回调。
- 成员函数`MsgProcess`用于处理消息,`MsgBaseRsp`和`MsgCommonRsp`用于发送基础响应和通用响应,`MsgBaseReq`用于发送基础请求,`RealPlayReq`用于实况播放请求。
6、 静态变量和函数
- `static int jt808Index;` 和 `static CCritSec CritSec_jt808Index;`:
用于管理JT808索引的静态变量和互斥锁。
- `static int JT808IndexAdd()`:
一个静态函数,用于增加JT808索引。
7、成员变量
- `char MyIpAddr[IPSTR_MAX_LEN+4];` 和 `UINT16 MyPort;`:本地IP地址和端口。
- `bool ExitFlag;`:进程退出标志。
- `CTcpServer *pTcpSvr;`:TCP服务器对象指针。
- `Jt808RecvCache *m_pStack;`:接收缓存堆栈。
文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。