下面為信息包的格式和內容
數據包格式如下圖所示,所包含的內容從左到右進行傳輸:包頭中的信息全部為網絡字節順序!
序號 |
字段名稱 |
長度(Bytes) |
類型(C++) |
字段說明 |
1 |
head |
2 |
Unsigned Short |
包頭標識,固定為0xFFFF |
2 |
version |
2 |
Unsigned Short |
版本信息,當前為0x0030 |
3 |
length |
2 |
Unsigned Short |
包括包頭的全部包體長度 |
4 |
command |
2 |
Unsigned Short |
命令號 |
5 |
status |
4 |
Unsigned Integer |
應答狀態 |
6 |
taskid |
4 |
Unsigned Integer |
任務流水號 |
7 |
sender |
4 |
Unsigned Integer |
發送方標識1 |
8 |
sessionid |
4 |
Unsigned Integer |
發送方標識2 |
9 |
timestamp |
4 |
Unsigned Integer |
時間戳 |
10 |
flag |
2 |
Unsigned Short |
數據加密標志:0:不加密,1:DES加密 |
11 |
reserved |
4 |
Unsigned Integer |
保留字段 |
包頭信息中,開始標識(head),版本信息(version)為固定格式;
包體長度(length),提示整個包體(包括包頭)的長度,接收方據此來完成一個業務數據包的接收和解析;
命令號(command),為客戶端和服務器約定的業務命令,從0到65535,具體定義詳見下表:
號碼段 |
起始編號 |
結束編號 |
使用說明 |
1 |
0X0000 |
0X03E7 |
對應具體的業務命令號,如1為充值等 |
2 |
0X03E8 |
0XFFFF |
系統保留命令字,目前0XFFFE為心跳包,0XFFFF為心跳應答包 |
應答狀態(status),請求時總設置為0;應答時,由SP應用服務程序返回相應的操作結果或錯誤原因;
任務流水號(taskid)由自行定義,SP應用程序在響應包中必須返回,SP應用程序可以將此作為數據包一段時間內的唯一序列號。
發送方標識1(sender)、發送方標識2(sessionid)、時間戳(timestamp)以及保留字段(reserved),可以為發送方保留一些私有信息,返回包時原樣返回。
1、通用網關在連接建立之后,根據剛才加密的字節流,加上信息包頭,組合成信息包,然后發送(Send)信息包,發送的字節數為加密后的字節流字節數+24(24信息包頭的字節長度);在上述的例子中,信息包大約如ffff0200 00001100 00004e5f 00114b3f 00000000 0100 0038 2fd65329e2770074791503c2dab1d209fe0225636dd07f7277bd291209e1a498df28f7af2f0eb4f1be2831f0fa8987b7f9;其中業務加密字節流的長度這里是56,體現在網絡字節中是0x0038,如果是x86系列的PC,需要做主機到網絡(ntohs)字節順序轉換;
2、SP應用服務程序接收(Recv)該信息包,根據包頭信息截取對應的字節流,然后進行解密處理,得到加密前的業務字符串,另外還需要把其他的包頭標識、兩個包頭保留字,存儲在本地;
3、 SP應用服務程序根據流程開發人員與之協商好的格式對接收的字符串進行解析,然后進行響應的處理
4、 SP應用服務程序在發送之前,同樣根據密匙對該返回字符串進行加密處理,然后對加密字節流長度進行計算,加上剛才發送過來的包頭標識和版本號以及保留字等,組合成信息包;注意這時,字節流的長度是返回加密字節流的長度,而且是網絡字節的。