中国联通SP业务接入开发总结SGIP1.2 协议

本文介绍了在开发中国联通SP业务接入过程中遇到的挑战,包括序列号定义、字节序转换、处理重复上行消息以及下发短信时的LinkID匹配问题。通过解决这些问题,实现了与SMG的顺利通信。
摘要由CSDN通过智能技术生成

开发过程遇到的几个难点:

1、 序列号的定义
2、 int转byte[]及字节序
3、 重复收到联通上行(MO)
4、 收到用户的定购命令但无法下行(MT)

 

1、序列号的定义

SGIP1.2 第7页 序列号的定义 写道

 

 

      序列号分成三部分,每部分为一个32位整数,第一部分表示命令源节点的编号,第二部分表示命令产生的日期和时间(网关系统中的任何命令的保存时间都不应该超过一年),格式为十进制的mmddhhmmss,比如11月20日20时32分25秒产生的命令,其第二部分为1120203225;第三部分由0开始,循环进位,直到进位满了之后再清零,重新开始计数。接收方在返回应答时,应答的序列号必须和相对应的命令的序列号相同。                                        

 

 

SGIP1.2 第7页 源节点编号规则 写道
   在整个网关系统中,所有的通信节点(SMG、GNS、SP和SMSC)都有一个唯一的数字编号,不同的SP或SMSC或SMG或GNS编号不能相同,编号由系统管理人员负责分配。编号规则如下:
 SMG的编号规则:1AAAAX
 SMSC的编号规则:2AAAAX
 SP的编号规则:3AAAAQQQQQ
 GNS的编号规则:4AAAAX
 其中,AAAA表示四位长途区号(不足四位的长途区号,左对齐,右补零),X表示1位序号,QQQQQ表示5位企业代码。

  由于java只有byte,short,int,long等数据类型,不像c/c++那样,有unsigned int,所以java语言中普通的int变量不能存储如此大的数据

比如说,我所在的城市济南,区号为0531,公司的企业代码为41211,按照源节点编码规则为3053141211,共10位,而int变量的范围为-2147483648~2147483647

    int srcnode = 3053141211;显然不能通过编译因为已经超过int的表示范围。

    还好,Java提供了超大整型类BigInteger

  int srcnode =new BigInteger("3053141211").intValue();    //源节点编号

  byte[] srcnodeBytes = IntToBytes4(srcnode);

用于Java采用补码srcnode的字节长度为5,不要使用toByteArray()方法获得字节数组,应单独编写一个方法用于int转byte[]的方法,注意必须以网络字节序的方式转换,即高位放在低地址,低位放在高地址

 

 

Java代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值