自从我发了博文“中国联通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
修改内容:
- 修改com.tdt.unicom.sgip.svr.SPSender类,将计时器Timer改为ScheduledExecutorService,在测试中发现Timer内部异常时,会将错误传染给倒霉的调用者,导致下发线程全部中断。
- 优化了短信下发的流程。
- 修复了群发短信时,只有一个手机能收到短信的bug。
以上bug都是根据网友反馈发现的,在这里表示感谢。
2011-12-16 新包发布 v1.2
修改内容:
- 修改com.tdt.unicom.sgip.svr.SPSender类,上一个版本中,如果联通网关断开连接,SP端再次发送短信时,会出现异常,导致短信无法行,v1.2版本已修复该bug。
感谢网友“白开水”的反馈。
2012-02-08 新包发布 v1.3
修改内容:
- 将SP的源节点编号,SMG网关的登陆用户名和密码在productionConf.xml配置文件中进行配置,无需再修改源代码的参数。
2013-06-08新包发布 v1.4
修改内容:
- 根据反馈,在下发线程因异常中断时,后续的短信无法再继续发送,必须重启才能 解决,该版本修复了该bug,当有线程异常退出时,自动生成的新线程替代已异常退出的线程
- 优化了在高并发环境下发送的策略,如果下发线程全部忙碌,采用谁调用谁发送。
- 预留相关接口,如果想将收到短信插入数据库,转发其它业务层等请在com.tdt.unicom.sgip.svr.UnicomSPMonitor的transmitDeliverMsg方法实现自己的业务逻辑处理。 /**
* 将收到的短信转发给相应的业务逻辑处理层
* 转发方式Socket、Http、WebService
1. * @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未尾一定要加空格!!!)