CMPP协议里的Msg_Id字段如何生成

爱编程_无需等待 2017-02-26 03:38:21
CMPP3.0协议里面CMPP¬_SUBMIT_RESP包里包含一个Msg_Id字段,协议规定的生成算法如下:
(1) 时间(格式为MMDDHHMMSS,即月日时分秒):bit64~bit39,其中
bit64~bit61:月份的二进制表示;
bit60~bit56:日的二进制表示;
bit55~bit51:小时的二进制表示;
bit50~bit45:分的二进制表示;
bit44~bit39:秒的二进制表示;
(2) 短信网关代码:bit38~bit17,把短信网关的代码转换为整数填写到该字段中。
(3) 序列号:bit16~bit1,顺序增加,步长为1,循环使用。
这样描述的非常不清楚,前面日期用二进制表示可是后面短信网关代码用什么进制呢?还有将二进数一位一位的拼成这样64位长的整数该怎么拼成呢,有没有哪位好心人能给我一个用C或C++实现的生成算法好学习学习,谢谢大家了
...全文
338 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hudou_k 2017-02-26
  • 打赏
  • 举报
回复
cmpp3这个协议在百度里面搜索一下,有很多java版的实现,照着抄吧。
  • 打赏
  • 举报
回复
引用 楼主 u012496128 的回复:
还有将二进数一位一位的拼成这样64位长的整数该怎么拼成呢
那个不叫“一位一位地拼成”,那是数值的 & 运算。例如 a & b 就是将“拼在一起”的意思。你应该在所有编程语言之前,学过计算机原理,知道数值 &、<<、>>操作吧?
java cmpp2.0 3.0 无jar纯源码demo(含服务端测试工具)[20171205] 找了挺多资料,CMPP的资源很多,但可以参考可用的不多, 特此开源cmpp的DEMO程序,无jar插件,纯源码实现。 语言为:java 工具为:Intellij IDEA 2017 附带第三方CMPP服务器测试工具,便于调试。 注解详细如: private long Msg_Id=0x00;//信息标识,由SP接入的短信网关本身产生,本处填空。 private byte Pk_total=0x01;//相同Msg_Id的信息总条数,从1开始 private byte Pk_number=0x01;//相同Msg_Id的信息序号,从1开始 private byte Registered_Delivery=0x01;//是否要求返回状态确认报告:0:不需要 1:需要 private byte Msg_level=0x01;//信息级别 private String Service_Id="";//业务类型,是数字、字母和符号的组合。 private byte Fee_UserType=0x00;//计费用户类型字段 0:对目的终端MSISDN计费; 1:对源终端MSISDN计费;2:对SP计费 private String Fee_terminal_Id="";//被计费用户的号码 private byte TP_pId=0x00;//GSM协议类型 private byte TP_udhi=0x00;//GSM协议类型。详细是解释请参考 private byte Msg_Fmt=0x0f;//信息格式0:ASCII串 3:短信写卡操作 4:二进制信息 8:UCS2编码 (0f)15:含GB汉字 private String Msg_src="";//信息内容来源(SP_Id) private String FeeType="01";//资费类别 01:对“计费用户号码”免费 02:对“计费用户号码”按条计信息费 03:对“计费用户号码”按包月收取信息费 04:对“计费用户号码”的信息费封顶 05:对“计费用户号码”的收费是由SP实现 private String FeeCode="000000";//资费代码(以分为单位) private String ValId_Time="";//存活有效期 private String At_Time="";//定时发送时间 private String Src_Id="";//源号码 SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码 private byte DestUsr_tl=0x01;//接收信息的用户数量(小于100个用户) private String Dest_terminal_Id="";//接收短信的MSISDN号码 private byte Msg_Length;//信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节) private byte[] Msg_Content;//信息内容 private String Reserve="";//保留
功能特点: 1.遵照CMPP2.0协议实现,模拟了短信网关,支持CONNECT,SUBMIT,DELIVER,QUERY,CANCEL,TERMINATE消息。 2.支持多个客户端登录,支持单连接和双连接类型,支持标准CMPP和亚信API. 3.服务端自动生成Msgid,支持状态报告. 4.支持对客户端进行鉴权,用户可以自行配置有效的客户端ICPID,SPID,PWD,和有效的IP地址。 5.以二进制形式显示消息流内容,并且能够把消息包的每个字段都打印出来,当然这会影响一些效率。 6.模拟网关不对submit各字段的合法性进行判断(如msgsrc必须是企业代码icpid,srcid必须是接入号 发送错误代码介绍:0 = TRS_SUCCESS : 正确 1 = TRS_PACKET_ERR : 消息结构错 2 = TRS_CMD_ERR : 命令字错 3 = TRS_SEQ_DUPLICATE : 消息序号重复 4 = TRS_PACKET_LEN_ERR : 消息长度错 5 = TRS_FEE_ERR : 资费错 6 = TRS_MSG_LEN_ERR : 超过最大信息长 7 = TRS_SRV_CODE_ERR : 业务代码错 8 = TRS_FLUX_ERR : 流量控制错 9 = TRS_NOT_SRV_USER : 本网关不负责服务此计费号码,前转判断错(此SP不应发往本ISMG) 10 = TRS_SRC_ID_ERR : Src_Id错误 11 = TRS_MSG_SRC_ERR : Msg_src错误 12 = TRS_FEE_TERMINAL_ERR : Fee_terminal_Id错误 13 = TRS_DEST_TERMINAL_ERR : Dest_terminal_Id错误 160 = IP_ADDRESS_ERR : ZTE_EXTENED 帐号源IP地址错误 161 = LINK_FULL : ZTE_EXTENED 帐号已经建立了15条链路 162 = LOCK_MUTEX_ERR : ZTE_EXTENED 建链时锁错误 163 = RGSTRDDLVRY_ERR : ZTE_EXTENED Registered_Delivery取值错误 164 = FEEUSERTYPE_ERR : ZTE_EXTENED FeeUserType取值错误 165 = TERMINALTYPE_ERR : ZTE_EXTENED TerminalType取值错误 166 = MSGFMT_ERR : ZTE_EXTENED MsgFmt取值错误 167 = MSGFWDTYPE_ERR : ZTE_EXTENED msgFwdType取值错误 168 = USERTYPE_ERR : ZTE_EXTENED UserType取值错误 169 = ROUTE_ERR : ZTE_EXTENED 路由失败 170 = SMMC_ERR : ZTE_EXTENED 信息过滤失败 171 = IAGWM_LINK_DOWN : ZTE_EXTENED 与IAGW M模块断链 172 = SEND_AUTH_ERR : ZTE_EXTENED 给IAGW M模块发消息失败,非断链 173 = AUTH_ERR : ZTE_EXTENED IAGW M认证失败 174 = LICENSE_FAILED : ZTE_EXTENED 超过系统license限制 175 = TRANS_ERR : ZTE_EXTENED 消息转发错误 176 = RESP_TIME_OUT : ZTE_EXTENED 等resp超时 177 = FATAL_ERR : ZTE_EXTENED 当错误码为-1时转换为此值

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧