中国移动EMPP v2.0 协议补充说明

此文的依据是EMPP v2.0的协议,因为原有协议上的描述并不清晰,所以在此补充如下:

 数据格式定义详解(原文链接 http://ddbiz.com/?p=118)

 

1.      Octet string

C#中,Octet string就是一个 byte[]数组,一般可以通过Encoding.ASCII.GetBytes(string)来获得

 

2.      字节顺序

Socket中,使用byte buffer传输数据时,必须对int,uint等超过2byte的整形进行传输字节调整,可以通过调用

IPAddress.HostToNetworkOrder进行转换,也可以通过指针进行转换

 

同理,从socket中获取的buffer,在转换回整形是,仍需要使用IPAddress.NetworkToHostOrder进行调整

 

3.      EMPP_CONNECT中的 AuthenticatorSource

AuthenticatorSource 使用的是 md5一组数据,这组数据的初始化,是根据

AccountId string类型,Octet string +

9个二进制0 +

Password string类型 +

MMddHHmmss string类型的日期串

组成的 Octet string

也可以分别取各部分的string Octet String,合并后再进行md5

 

4.      EMPP_ACTIVE_TEST

EMPPv2.0文档中建议的心跳包设置为

间隔时间 C = 3分钟

超时时间 T = 5

超时次数 N = 3

可是实际应用中,当客户端1分钟无数据发送的话, EMPP服务端就做了拆线,收到 TCP:Flags: AF 标志

所以实际的应用中, 应该使用每分钟发送一次检测包

 

5.      EMPP_SUBMIT长短信的设置

EMPPv2.0中关于长短信的格式设置没有做详细说明,要完成长短信,必须设置如下内容:

Ø  Tp_udhi必须为1

Ø  Msg_fmt必须为 08 (UCS2编码)

Ø  MsgContent必须在头部增加6个字节的长短信标志位:

0x05 udhi 协议的体长度,可以为 05(6个字节的tp_udhi协议) 06(7个字节的协议),本系统采用的是6字节的udhi协议

0x01 参见 GSM 03.40规范中 9.2.3.24.1,表示随后的这批长短信的标识位长度,取值为1

0x03 表示剩下的短信标识的长度

0x00 短信的唯一标志,可以忽略之

0x02 长短信分割的数量, 2表示分成2段;4表示分成4

0x01 长短信中的第几段

 

6.      EMPP_DELIVERY

当通过短信平台发送短信时,SMSC发送完毕,且客户端接收(仅仅检测到观看时的状态)到后,SMSCSP发送了此状态报告,以表明用户已经观看了。更详细的信息,可以观看状态报告

手机发送的上行数据,也是通过 EMPP_DELIVERY来发送给平台的。


7.      EMPP_CHANGEPASS

EMPP规定链接的帐户密码必须每3个月修改一次(上海这里是如此,其他地区请自行沟通)。于是实现了 EMPP_CHANGEPASS 。结果,每次请求更新密码,链接就会被断开,经查询才知,这个密码不能通过此命令更新(已经禁止通过程序更新密码),只能通过 web的管理界面手动更新。SHIT!!


8.      Valid_Time和At_Time

EMPP平台上的时间定义方式,当有通信包的字段需要使用时间格式时,一般的定义如: YYMMDDhhmmsstnnp,其理解方式可为:

YYMMDDhhmmss 年月日时分秒, 对应的c#定义为 yyMMddHHmmss

t 十分之一秒,对应的c#定义为 f

nn 相对于UTC的四分之一小时,比如北京时区为+8, 则 nn = 8*4 = 32

p 取值为+或者-,表示超前或落后与UTC的时间,比如北京为 +8,则p = +


9.      补充一些错误代码

有些错误代码在文档中没有被定义,这里逐一列出

DTBLACK:目的号码在企信通黑名单是,需要联系客户经理删除。

DTERROR:手机号码错误,或不存在。

MK:0001:这个是网关返回的一个错误代码,具体还需要联系客户经理到网关查询


 

<待续>(原文链接 http://ddbiz.com/?p=118)

你可能感兴趣的:(socket,String,buffer,中国移动,byte,平台)