`
sunnylocus
  • 浏览: 869547 次
  • 性别: Icon_minigender_1
  • 来自: 美国图森
社区版块
存档分类
最新评论

中国联通短信网关接入程序源代码(SGIP1.2协议)

    博客分类:
  • Java
阅读更多

 自从我发了博文“中国联通SP业务开发总结”后有很多的朋友问我开发上一些问题,开发接入程序必须有一定的socket编程基础,且必须熟悉sgip1.2协议才可以,我应一位网友的要求将我开发的短信接入程序源代码发布,希望对开发短信业务的朋友提供一些帮助,代码可自由传播。如有疑问请留言,我会尽量解答。

 

ps:

  lib.rar是短信程序所用到的jar包,有很多朋友问我要jar包,现在给补上。

  [lib]

    +----jdom1.1.jar

    +----log4j-1.2.16.jar

    +----mail.jar

    +----xerces.jar

 

lib里还少一个jar包,xercesImpl.jar,继续补上。

 

2011-04-15 新包发布 v1.1

修改内容:

  1. 修改com.tdt.unicom.sgip.svr.SPSender类,将计时器Timer改为ScheduledExecutorService,在测试中发现Timer内部异常时,会将错误传染给倒霉的调用者,导致下发线程全部中断。
  2. 优化了短信下发的流程。
  3. 修复了群发短信时,只有一个手机能收到短信的bug。

以上bug都是根据网友反馈发现的,在这里表示感谢。

 

 

2011-12-16 新包发布 v1.2

修改内容:

  1. 修改com.tdt.unicom.sgip.svr.SPSender类,上一个版本中,如果联通网关断开连接,SP端再次发送短信时,会出现异常,导致短信无法行,v1.2版本已修复该bug。

  感谢网友“白开水”的反馈。

 

2012-02-08 新包发布 v1.3

修改内容:

  1. 将SP的源节点编号,SMG网关的登陆用户名和密码在productionConf.xml配置文件中进行配置,无需再修改源代码的参数。

2013-06-08新包发布    v1.4

修改内容:

  1.   根据反馈,在下发线程因异常中断时,后续的短信无法再继续发送,必须重启才能  解决,该版本修复了该bug,当有线程异常退出时,自动生成的新线程替代已异常退出的线程
  2. 优化了在高并发环境下发送的策略,如果下发线程全部忙碌,采用谁调用谁发送。
  3. 预留相关接口,如果想将收到短信插入数据库,转发其它业务层等请在com.tdt.unicom.sgip.svr.UnicomSPMonitor的transmitDeliverMsg方法实现自己的业务逻辑处理。
      /**
       * 将收到的短信转发给相应的业务逻辑处理层
       * 转发方式Socket、Http、WebService
       * @param command
       */
      public void transmitDeliverMsg(final SGIPCommand command) {
    }

特别说明:

        有朋友在测试我的短信程序时,会出现Exception in thread "MT-thread-0" java.lang.RuntimeException: java.net.SocketException: Software caused connection abort: recv failed
这个异常,这是因为你测试机器的IP地址没有在联通短信平台上备案,联通SMG有一个白名单,只有你的IP地址出现在这个白名单时你才会与SMG网关建立socket连接,否则会被联通的防火墙拦截。这个异常就是因为你的socket连接被对方的防火墙给拦截了。

 

 

感谢网友“明晓”协助测试!

=====================================================================

如何打包,并加载第三方类库?

 

有童鞋下载了源代码,修改代码打好包后不知道如何加载第三方类库,下面是如如何加载第三方类库的方法。

1、在打好包(假设打好的包叫UNICOM.jar)的目录下,新建一个目录SGIP_LIB,将用到的第三方类库拷贝到该目录下

2、在打好包的目录下,新建一个目录SGIP_Config,用winrar压缩软件打开UNICOM.jar包,将所有配置文件拖到SGIP_Config目录下

3、用Winrar压缩软件打开UNICOM.jar包META-INF目录下的MANIFEST.MF文件,加入

Class-Path: ./SGIP_Config/  ./SGIP_LIB/log4j-1.2.16.jar ./SGIP_LIB/jdom1.1.jar ./SGIP_LIB/mail.jar ./SGIP_LIB/xerces.jar ./SGIP_LIB/xercesImpl.jar   

4、保存退出,在终端运行Java -jar ./UNICOM.jar即可启动短信平台(注意Class-Path未尾一定要加空格!!!)

  • UNICOM.rar (3.7 MB)
  • 描述: 过时版本
  • 下载次数: 3906
  • lib.rar (3 MB)
  • 下载次数: 1999
  • UNICOM_v1.1.rar (2.8 MB)
  • 描述: 2011-04-15 发布 新版本
  • 下载次数: 989
  • UNICOM_v1.2.rar (146.1 KB)
  • 描述: 2011-12-16 发布 v1.2
  • 下载次数: 791
  • UNICOM_v1.3.rar (154.5 KB)
  • 描述: 2012-02-08 发布 v1.3
  • 下载次数: 1190
60
6
分享到:
评论
183 楼 哎温柔 2017-03-28  
   感谢楼主分享
182 楼 ka520 2015-12-08  
软件包 org.apache.xerces.impl.dv.util 不存在
找不到符号
符号: 变量 Base64
位置: 类 com.tdt.unicom.test.TestSendSms

帅哥,用你的1.4版本启动的时候报这个错,你给的LIB.JAR里面只有四个JAR包,
jdom1.1.jar log4j-1.2.16.jar mail.jar xerces.jar

这四个JAR,是不是漏了一个?
181 楼 guangsheng_sun 2015-04-16  
感谢楼主的分享,已成功对接联通网关
180 楼 SDN_SUPERUSER 2015-02-27  
我在使用您代码测试的时候。
当执行
socket = SocketFactory.getDefault().createSocket(unicomIp,unicomPort);
报错
com.tdt.unicom.sgip.svr.SPSender - 短信下发时发生IO流异常:Connection refused: connect. 短信下发实例重新放回发送队列!

请问是怎么回事?
179 楼 SDN_SUPERUSER 2015-02-27  
您好,我想问下,您代码里面的TestRecvSms.java里面send方法为什么没有把用户名和密码写入网关?
178 楼 liu9527 2014-10-20  
你好,hero1122曾问过这样的问题:

177 楼 hero1122 2014-06-10   引用
请问一下博主,发送短信异常以后应该是把该请求放到队列里面,然后在线程池里面每30s重新下发一次,但是为什么现在我执行代码在下发短信过程中报异常以后会一直报这个错:短信下发时发生IO流异常:Socket closed. 短信下发实例重新放回发送队列!    像死循环一下,把队列调小也不管用,请问一下为什么?

我运行了代码后也发生这样的问题,环境为 unicom1.4+ 莎莎网关模拟器。
我仔细跟踪了代码和分析了日志文件发现,当出现上述异常时,情况如下
sp向 smg bind后,提交了多个mt;
此时smg没有返回mt的应答数据,就是在30秒内,没有收到smg返回的mt.resp包。
此时,发送队列为空,且bind后超过3s,于是sp开始主动unbind
同样,sp收不到unbind的unbindResp,就是已写入socket,但收不到返回值。
此后,sp在提交未成功的mt时 开始无限循环提交。

此时在查看 莎莎网关模拟器时,模拟器提示 mt的resp已下发给sp,
unbind的 resp也正常下发

现在问题就出在是 模拟器是否真正下发了resp,sp没收到;还是模拟器就没有下发成功resp?

正在用抓包工具查看是是谁的问题
177 楼 hero1122 2014-06-10  
请问一下博主,发送短信异常以后应该是把该请求放到队列里面,然后在线程池里面每30s重新下发一次,但是为什么现在我执行代码在下发短信过程中报异常以后会一直报这个错:短信下发时发生IO流异常:Socket closed. 短信下发实例重新放回发送队列!    像死循环一下,把队列调小也不管用,请问一下为什么?
176 楼 htoracle 2014-06-04  
我的qq421464282+我一下吧
175 楼 htoracle 2014-06-04  
你的代码能移到web项目里面么
174 楼 htoracle 2014-06-04  
linkid是怎么来了这个没有看懂
173 楼 w0z1y 2014-05-06  
博主,您好:
近期我遇到一个问题想请教一下。就是下发长短信后,从第二个消息包开始,网关的返回是错误码9.序列号非法。在封装包时,我使用的序列号相同和不相同都返回这个错误码。(前两部分相同,第三部分是一个递增序列)第三部分用相同的值也返回9,用不同的值也返回9。请问这是怎么回事呢?谢谢!
172 楼 sunnylocus 2014-04-25  
wkcx2011 写道
你好,你好,我测试发送短信时返回“SMG拒绝连接。错误码:1",IP,账户密码都对着呢,请问这是什么问题,是程序问题还是通道问题呢?期待你的回复!

你的问题解决了么?你这个问题很常见,联通有个白名单,很显然你测试的IP地址没有在联通的白名单里,SMG拒绝链接。
171 楼 wkcx2011 2014-04-22  
你好,你好,我测试发送短信时返回“SMG拒绝连接。错误码:1",IP,账户密码都对着呢,请问这是什么问题,是程序问题还是通道问题呢?期待你的回复!
170 楼 zouwei_1989 2014-03-03  
你好,我在下发短时候总是会报 :
短信下发时发生IO流异常:Broken pipe. 短信下发实例重新放回发送队列!
请问这是什么情况,你有没有遇到过?
169 楼 ie7shop 2014-02-20  
您好,我想问一下就是具体怎么使用呢 对于这一块也是一片空白,能写一遍简要的使用说明。万分感谢
168 楼 zssggg 2014-01-10  
先顶后下载,发扬好传统!
167 楼 tianqing 2014-01-07  
楼主你的通信代码,消耗CPU非常厉害,存在严重的性能问题
166 楼 fafuyuxing 2014-01-07  
楼主,您好,求源码谢谢了
644978225@qq.com
165 楼 水围山流山为水守 2014-01-02  
楼主您好,我的项目也需要做一个联通的短信,真心希望能得到您的指导,方便的话请加qq 960834486,看到此留言的其他高手也可以加哦,真心请教,谢谢
164 楼 wfh822 2013-12-19  
  请问楼主,短信发送扩展码是那个字段?

相关推荐

Global site tag (gtag.js) - Google Analytics