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

本文详细解析了EMPPv2.0协议的数据格式定义,包括Octetstring、字节顺序、连接认证源、心跳包设置、长短信设置及发送状态报告等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/suvi/article/details/6566276




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

 

 

数据格式定义详解

 

1.      Octet string

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

 

2.      字节顺序

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

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发送完毕,且客户端接收(仅仅检测到观看时的状态)到后,SMSC向SP发送了此状态报告,以表明用户已经观看了。更详细的信息,可以观看状态报告

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


本OCX提供以上3个接口 1,登录到上海动网关(EP请求连接到ESMP(EMPP_CONNECT)操作) 接口函数:long ConnectServer(LPCTSTR strUserName, LPCTSTR strPassWord) 功能说明:用户只需输入EMPP协议用户名和密码调用此函数即可连接到上海动网关. 参数说明:strUserName--用户名。strPassWord--用户密码 返回值: 0:正确 1:消息结构错 2:非法源地址 3:认证错 4:版本不匹配 5~ :其他错误 10001:已经达到该企业登录的最大登录数,目前只允许每家企业同时用10个帐号登录 2,发送短信操作(EP向ESMP提交短信(EMPP_SUBMIT)操作) 接口函数:long SendSms(LPCTSTR strSmsText, LPCTSTR strPhoneNumber) 功能说明:调用ConnectServer连接成功后便可以调用此函数发送短信。 参数说明:strSmsText,信息内容,最多60个汉字(上海动现在最长发60个字) strPhoneNumber,接收号码,用英文逗号分隔,最多可以发4个号码.例如“13888888888,13666666666,13999999999,13555555555” 返回值: 0:正确; 1:消息结构错; 2:命令字错; 3:消息序号重复; 4:消息长度错; 5:资费代码错; 6:超过最大信息长; 7:业务代码错; 8:流量控制错; 9:短信网关不负责服务此计费号码; 10:Src_Id错误; 11:Msg_src错误; 12:Fee_terminal_Id错误; 13:Dest_terminal_Id错误; 14:双重认证错 10001:收信方号码为黑名单用户;10002:短信内容中包含敏感字,该短信被拒发 10003:提供给该试用企业的短信发送量已用完,系统停止对其的短信发送服务 10004:超过允许发给该用户的最大发信频率(对此类型错误,客户端可延时一段时间后重试短信发送) 10005:服务忙,请稍后再发短信(对此类型错误,客户端可延时一段时间后重试短信发送) 10006:向网关发送短信失败(对此类型错误,客户端可延时一段时间后重试短信发送)10007:该用户没有群发权限,不能给两人以上发送短信 3,接收短信(ESMP向EP送交短信(EMPP_DELIVER)操作),此接口为事件,接收到短信后出发该事件 接口函数:void OnReceiveSms(BSTR strPhoneNumber, BSTR strSmsText); 功能说明:接收短信事件 参数说明:strPhoneNumber上行号码 strSmsText,信息内容 使用流程:先调用ConnectServer建立与服务器的连接(EMPP_CONNECT),然后就可以循环调用SendSms进行发短信操作(EMPP_SUBMIT),以及在接收短信事件中处理接收短信(EMPP_DELIVER) 我的QQ:346263509 邮箱:huke1987@qq.com欢迎大家一起交流讨论上海动的EMPP协议 说明,本控件限制了只能发送500条。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值