1.基于GIS系统的有连接的优先级可变的数据传输方法,包含以下步骤:
1)参数初始化:
1.1)设置超时计数count=0,最大允许超时次数sum,超时时间time=2*count;
1.2)设置数据块编号datanumber=1,数据块总数dataSum=0;
1.3)设置每一类数据的阈值;
2)封装传输数据包,过程如下:
2.1)封装数据请求包,数据请求包的包格式如下:
1 2 1
RDI type 校验
其中,RDI表示数据请求包包标识,占用一个字节,值为0x01;type表示请求包请求的数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;校验占用一个字节,是从RDI开始到校验前所有字节的异或运算和;
2.2)封装请求开始发送数据包,请求开始发送数据包的包格式如下:
1 2 4 4 4 1 1
RST type size datasum datalength datastatus 校验其中,RST表示请求开始发送数据包包标识,占用一个字节,值为0x02;type表示数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;size表示传输数据的大小,占用4个字节;datasum表示传输的数据块总数,占用4个字节;
datalength表示每个数据包的长度,占用4个字节;datastatus表示数据状态,占用1个字节,若数据超出阈值,则值为0x02,反之则为0x01;校验占用一个字节,是从RST开始到校验前所有字节的异或运算和;
2.3)封装开始发送数据包,开始发送数据包的包格式如下:
1 2 1
STA type 校验
其中,STA表示开始发送数据包标识,占用一个字节,值为0x03;type表示请求包请求的数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;
校验占用一个字节,是从STA开始到校验前所有字节的异或运算和;
2.4)封装数据包,数据包的包格式如下:
1 2 1 4 — 1
DPI type priority datanum data 校验其中,DPI表示数据包包标识,占用两个字节,值为0x04;type表示数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;priority用于标识当前数据包在整个传输过程中的优先级,占用一个字节,值取决于datastatus,如果datastatus为0x01,则priority为1,否则priority为2;datanum表示数据块的编号;data表示传输的数据,占用长度由数据长度决定;校验占用一个字节,是从DPI开始到校验前所有字节的异或运算和;
2.5)封装请求下一个数据包,请求下一个数据包的包格式如下:
1 2 4 1
RTN type datanum 校验
其中,RTN表示请求下一个数据包包标识,占用一个字节,值为0x05;type表示数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;datanum表示数据包的编号;校验占用一个字节,是从RTN开始到校验前所有字节的异或运算和;
2.6)封装数据结束包,数据结束包的包格式如下:
1 2 1 4 1
STO type priority datacount 校验其中,STO表示数据结束包包标识,占用一个字节,值为0x06;type表示数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;priority用于标识当前数据包在整个传输过程中的优先级;datacount表示实际传输的数据包数;校验占用一个字节,是从STO开始到校验前所有字节的异或运算和;
2.7)封装取消发送数据包,取消发送数据包的包格式如下:
1 2 1
CAN type 校验
其中,CAN表示取消发送数据包标识,占用一个字节,值为0x07;type表示取消发送的数据包类型,占用两个字节,取值为0x00到0xFF区间的十六进制数,表示不同类型的数据;校验占用一个字节,是从CAN开始到校验前所有字节的异或运算和;
3)数据发送过程,过程如下:
3.1)阻塞等待客户端连入,如果有客户端连入,与客户端创建数据交互通道,进入步骤
3.2);
3.2)开启监听事件;
3.3)监视客户端是否接收到新字符,如果有新字符,进入步骤3.4),否则转至步骤
3.14);
3.4)解析收到字符的包标识,如果是RDI,进入步骤3.5);如果是STA开始包,转至步骤
3.6);如果是请求下一个数据包RTN,转至步骤3.7);如果是CAN,转至步骤3.8);
3.5)收到RDI,解析请求包,根据请求包封装数据,向客户端发送请求数据开始发送响应RST;
3.6)收到STA,将数据放入数据缓冲区data,转至步骤3.9);
3.7)收到请求下一个数据包,解析请求包,转至步骤3.9);
3.8)收到取消发送数据包,取消发送;
3.9)判断数据块标号datanumber是否小于数据块总数dataSum,如果小于,则进入步骤
3.10),否则转至步骤3.13);
3.10)判断数据缓冲区data中优先级priority=2的数据包是否为空,如果为空,转至步骤3.11),否则转至步骤3.12);
3.11)发送数据块标号为datanumber的数据包,转至步骤3.3);
3.12)发送data中优先级priority=2的数据包,转至步骤3.10);
3.13)发送数据块结束包,发送数据结束包,转至步骤3.3);
3.14)判断等待是否超时,如果没超时,转至步骤3.4),否则转入步骤3.15);
3.15)判断超时计数器count是否小于最大允许超时次数sum,如果小于,超时计数器count=count+1,超时时间time=2*count,向服务器发送重新发送请求,否则传输出错,关闭数据通道;
4)数据接收过程,过程如下:
4.1)阻塞等待客户端连入,如果有客户端连入,与客户端创建数据交互通道,进入步骤
4.2);
4.2)向客户端发送请求数据响应RDI,并开启监听事件,进入步骤4.3);
4.3)监视客户端是否接收到新字符,如果有新字符,进入步骤4.4),否则转至步骤
4.10);
4.4)解析收到字符的包标识,如果是RST,进入步骤4.5);如果是DPI,转至步骤4.6);如果STO,转至步骤4.7);
4.5)收到RST,解析请求开始发送数据包,数据块总数dataSum=datasum,向客户端发送可以开始包,转至步骤4.3);
4.6)判断数据包是否正确,如果正确,转至步骤4.8),否则转至步骤4.9);
4.7)停止接收数据;
4.8)发送RTN;
4.9)数据包标号datanumber=datanumber+1,发送RTN;
4.10)判断等待是否超时,如果没超时,转至步骤4.4),否则继续步骤4.11);
4.11)判断超时计数器count是否小于最大允许超时次数sum,如果小于,超时计数器count=count+1,超时时间time=2*count,向服务器发送重新发送请求,否则传输出错,关闭数据通道。