SGIP/SMGP长短信处理方法与改造建议

联通SGIP长短信:

请问各位通过联通短信接口开发时,你们长短信是怎么处理的呢?我所了解有下面2种: 
1.本地拆分,分成多个sumbit,这样拆分成几条手机端将收到几条,坏处是手机端不方便阅读。(技术难点,汉字如何拆分?) 
2.按照sgip协议在messagecontent中加入6字节协议头交给网关去处理。这种网关会根据你填写的协议头,将多条整合成一条,这样在手机端收到就是一条显示,这种我测试了,但是手机端并没合成一条,而且每条前面有小段乱码(测试了3个手机都一样),不知有没有人做过这方面的,是否成功过?是联通本身网关问题吗? 

 

下面是我加在submit消息messagecontent前的6字节协议头: 


tp_udhiHead[0] = 0x05;// 表示剩余协议头的长度 
tp_udhiHead[1] = 0x00;// 包头类型标识,固定填写0x00,表示长短信 
tp_udhiHead[2] = 0x03;// 子包长度,固定填写0x03,表示后面三个字节的长度; 
//tp_udhiHead[3] = 0x0A;// :长消息参考号,每个SP给每个用户发送的每条参考号都应该不同,可以从0开始,每次加1,最大255,便于同一个终端对同一个SP的消息的不同的长短信进行识别 
tp_udhiHead[4] = (byte) messageUCS2Count;// 本条长消息的的总消息数,从1到255,一般取值应该大于2 
tp_udhiHead[5] = (byte) number;// 本条消息在长消息中的位置或序号,从1到255,第一条为1,第二条为2,最后一条等于第五字节的值。 
根据网上的资料也将tp_udhi = 1;messageCoding = 8; 

 

 


 

电信SMGP长短信

一、设置tlv字段TP_udhi为0x01,表示消息内容里面包含消息头(也就是说含长短信头) 

二、内容前面需要增加6个字段 

  1、  字节一:包头长度,固定填写0x05; 

  2、  字节二:包头类型标识,固定填写0x00,表示长短信; 

  3、  字节三:子包长度,固定填写0x03,表示后面三个字节的长度; 

  4、  字节四到字节六:包内容: 

  a)  字节四:长消息参考号,每个SP给每个用户发送的每条参考号都应该不同,可以从0开始,每次加1,最大255,便于同一个终端对同一个SP的消息的不同的长短信进行识别; 

  b)  字节五:本条长消息的的总消息数,从1到255,一般取值应该大于2; 

  c)  字节六:本条消息在长消息中的位置或序号,从1到255,第一条为1,第二条为2,最后一条等于第四字节的值。 


例子: 

05 00 03 00 02 01 

05 00 03 00 02 02 


三、你还需要设置PkTotal和PkNumber 

这个字段如果不设置并不影响用户手机对短信的拼装,但是会影响ismp的健权和计费,一组pktotal pknumber里面的数据ismp是当一条短信健权和计费。 



特别说明:如果网关方式长短信一定要ucs-2编码,gbk如果发送的短信内容全是全角字符没问题,如果有半角的,很容易乱码 

因为gbk,英文当1个字节;usc-2 中英文都2字节,所以拆分的时候不会出现汉字被截半个的问题 


总体来说cdma的长短信跟gsm一样通过udh的方式实现的,而其他wap push和彩信的sl跟gsm差别较大


加包头,加IP_UDHI.IP_UDHI在电信的网关协议3.1中是个扩展字段.应该就是转门针对这块的. 


我们的开发已经实现这个功能了。长短信. 


楼上的意见很对。不过在做的过程中很多细节的东西需要在注意的.


目前API包使用是正常的。但是存在一个非常让人烦躁的问题. 

长短信的问题. 

比如我发的信息是200个中文,到了客户的手机,要显示5条显示完(即便是支持长短信的手机也是这样). 

这段时间查了很多资料,发现关于CDMA的这块长短信的资料实在是少得可怜. 


我要实现的效果是:不管配置文件有没有对发出去的短信最拆分,我打个比方,我的控制是100个字节.短信超过了50个汉字后,就会拆分成多条发出去.手机终端(支持长短信的手机)收到短信后是一条信息显示完。而不是多条. 


之前查找的资料,是说加上TP_udhi(值为1),然后消息内容增加用户数据包头UDH. 

现在尝试这样做,但是测试还是不如意.

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
SGIP(Short Message Gateway Protocol)是一种通信协议,用于在电信运营商的短消息网关和短消息中心之间传递短消息。SGIP1.2是SGIP协议的一个版本,在Java语言中有相应的实现。 SGIP1.2 Java是指在Java编程语言中开发和实现SGIP1.2协议的相关功能。使用SGIP1.2 Java可以实现与电信运营商的短消息网关和短消息中心进行通信的功能,包括发送和接收短消息,查询短消息状态等。 在使用SGIP1.2 Java进行开发时,可以使用Java提供的网络编程相关的类和方法进行与短消息网关和短消息中心的连接和通信。通过建立与短消息网关和短消息中心的TCP/IP连接,可以实现双向的短消息传输。开发者可以根据SGIP1.2协议的规范,编写Java代码来解析和封装短消息的相关协议字段,实现对短消息的发送和接收。 SGIP1.2 Java的使用可以广泛应用于短信服务商、企业内部短信平台等领域,通过与电信运营商的短消息网关和短消息中心进行对接,实现短消息的批量发送和接收,并提供相关的状态查询和报告功能。同时,SGIP1.2 Java还可以结合其他相关的技术,比如数据库操作、日志记录等,提升短消息的处理效率和可靠性。 总之,SGIP1.2 Java是一种实现SGIP协议的Java编程语言版本,通过与电信运营商的短消息网关和短消息中心进行通信,实现短消息的发送、接收和状态查询等功能。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值