短信网关接入程序的源码,基于SGIP协议1.2版本的进行了整理和改动,附件中有可运行版本的Demo以及SGIP1.2可运行的源码,对于SP接入程序运用的技术主要是多线程+Socket+各种协议的了解。
在开发中,多线程中要注意的是Dead Lock问题,线程"死等"的话会影响Web性能以及产生内存问题,所以在最大线程数以及响应时间要思考清楚,这部分是多线程需注意的,其次是Socket开发,这部分相比较代码固定些,首先创建连接的Scoket,然后通过Bind输入流得到连接状态,如state具体说明如下:
0:无错误,命令正确接收
1:非法登录,如登录名、口令出错、登录名与口令不符等
2:重复登录,如在同一TCP/IP连接中连续两次以上请求登录
3:连接过多,指单个节点要求同时建立的连接数过多
4:登录类型错,指bind命令中的logintype字段出错
5:参数格式错,指命令中参数值与参数类型不符或与协议规定的范围不符
等等类型的错误,根据具体错误匹配进行问题排查。在获得了状态无误后,通过Submit向网关write,然后通过read其in的方式获得是否发送成功。
对于和网关的连接中,头和体的定义很关键,否则会被网关过滤或者"死等"状态,消息ID及对应值如:
SGIP_BIND | 0x1 |
SGIP_BIND_RESP | 0x80000001 |
SGIP_UNBIND | 0x2 |
SGIP_UNBIND_RESP | 0x80000002 |
SGIP_SUBMIT | 0x3 |
SGIP_SUBMIT_RESP | 0x80000003 |
SGIP_DELIVER | 0x4 |
SGIP_DELIVER_RESP | 0x80000004 |
SGIP_REPORT | 0x5 |
SGIP_REPORT_RESP | 0x80000005 |
SGIP_ADDSP | 0x6 |
SGIP_ADDSP_RESP | 0x80000006 |
SGIP_MODIFYSP | 0x7 |
等等对于commandid的定义....
具体源码及可运行实例见附件,如需交流私下沟通: