輕鬆學習C 開發CMPP2 0協議閘道器 2

2021-06-05 20:46:54 字數 3070 閱讀 6335

登入協議包定義

訊息體包括:

欄位名

位元組數屬性

描述

source_addr  6

octet string

源位址,此處為sp_id,即sp的企業**。

authenticatorsource 16

octet string

用於鑑別源位址。其值通過單向md5 hash計算得出,表示如下:

authenticatorsource =

md5(source_addr+9位元組的0 +shared secret+timestamp)

shared secret 由中國移動與源位址實體事先商定,timestamp格式為:mmddhhmmss,即月日時分秒,10位。

version 1

unsigned integer

雙方協商的版本號(高位4bit表示主版本號,低位4bit表示次版本號)

timestamp 4

unsigned integer

時間戳的明文,由客戶端產生,格式為mmddhhmmss,即月日時分秒,10位數字的整型,右對齊。

訊息體長度為6+16+1+4=27

mobileconnect.cs

/// /// 訊息流水號,順序累加,步長為1,迴圈使用(一對請求和應答訊息的流水號必須相同) 訊息頭使用

///

uint sequenceid;

public mobileconnect(uint sequenceid)

/// /// 企業**

///

string sourceaddr;

/// /// 企業**

///

public string sourceaddr

set

}/// /// 雙方商定的驗證碼,類同與密碼

///

string sharedsecret;

/// /// 雙方商定的驗證碼,類同與密碼

///

public string sharedsecret

set}

/// /// 伺服器支援的最高版本號,對於3.0的版本,高4bit為3,低4位為0

///

uint version;

/// /// 伺服器支援的最高版本號,對於3.0的版本,高4bit為3,低4位為0

///

public uint version

set}

/// /// 時間戳的明文,由客戶端產生,格式為mmddhhmmss,即月日時分秒,10位數字的整型,右對齊

///

uint timestamp;

/// /// 時間戳的明文,由客戶端產生,格式為mmddhhmmss,即月日時分秒,10位數字的整型,右對齊

///

public uint timestamp

set}

/// /// 訊息處理 組合訊息

///

///

public byte tobytes()

;byte authenticatorsource = new byte[source_addr.length + zero.length + sharedsecret.length + timestampmd5.length];//登入訊息體引數2

array.copy(source_addr, 0, authenticatorsource, 0, source_addr.length);

array.copy(zero, 0, authenticatorsource, source_addr.length, zero.length);

array.copy(sharedsecret, 0, authenticatorsource, source_addr.length + zero.length, sharedsecret.length);

array.copy(timestampmd5, 0, authenticatorsource, source_addr.length + zero.length + sharedsecret.length, timestampmd5.length);

int index = 0;

array.copy(header.tobytes(), 0, rb, index, header.messagetitlelength);//新增訊息頭

index += (int)header.messagetitlelength;

array.copy(source_addr, 0, rb, index, source_addr.length);//新增登入訊息體引數1

index += 6;

array.copy(tools.md5(authenticatorsource), 0, rb, index, 16);//登入訊息體引數2 經md5加密

index += 16;

rb[index] = (byte)this.version;

index += 1;

array.copy(tools.intchangenetbyte(timestamp), 0, rb, index, 4);

return rb;

}/// /// 登入驗證訊息體的長度

///

public uint connectlength

}

訊息頭協議包

mobilemessagetitle.cs已經定義,登入協議包mobileconnect.cs如何使用如下:

mobileconnect mcont = new mobileconnect(tools.seqid);為訊息流水號(唯一)

mcont.sharedsecret = 密碼;

mcont.sourceaddr = 企業編號;

mcont.timestamp = uint.parse(datetime.now.tostring("mmddhhmmss"));

mcont.version = 0x30;

mcont.tobytes();

輕鬆學習C 開發CMPP2 0協議閘道器 3

登入應答協議包定義 欄位名 位元組數 屬性描述 status 1 unsigned integer 狀態 0 正確 1 訊息結構錯 3 認證錯 4 版本太高 5 其他錯誤 authenticatorismg 16 octet string ismg認證碼,用於鑑別ismg。其值通過單向md5 has...

協議開發 中移動CMPP2 0協議API(四)

接上篇 八 鏈路檢測 根據 cmpp 協議當鏈路檢測包發出超過時間 t後未收到響應,應立即再傳送鏈路檢測包,再連續傳送 n 1次後仍未得到響應則斷開此連線,並根據需要重新建立鏈結 t 60 秒,n 3 但也可以加快鏈路檢測的速度 這個並不影響 api的正常執行 要鏈路檢測測試 鏈路是每 30秒傳送一...

cmpp2 0長簡訊的處理方案

長簡訊處理方案 上次寫過對簡訊傳送的處理,並沒有體現出對長簡訊的處理方案,在實際應用中發現了以下問題,對於簡訊長度超過指定的大小時會出現截短的現象.1 這種方案是處理長簡訊的方式 可以實現向客戶端傳送的連續的多條簡訊合併成一條在客戶端的手機上顯示 華為簡訊傳送類處理 公用類 param 簡訊類,包括...