发送长短信

在动手之前google了一下相关资料,查了下规范更正了以前的错误理解:以前以为是与短信头有关,现在才明白原来只是在内容里面增加协议头就可以了,但怎么让短信网关知道你发的是长短信呢?TP_udhi 设置为1即可.
TP_udhi设置好了,就要组装协议头了,GSM 03.40规范中说协议头有两种,分别是长度为6和长度为7的协议头,我用的是长度为6的协议头,格式如下:
6位协议头格式:05 00 03 XX MM NN
byte 1 : 05, 表示剩余协议头的长度
byte 2 : 00, 这个值在GSM 03.40规范9.2.3.24.1中规定,表示随后的这批超长短信的标识位长度为1(格式中的XX值)。
byte 3 : 03, 这个值表示剩下短信标识的长度
byte 4 : XX,这批短信的唯一标志,事实上,SME(手机或者SP)把消息合并完之后,就重新记录,所以这个标志是否唯一并不是很重要。
byte 5 : MM, 这批短信的数量。如果一个超长短信总共5条,这里的值就是5。
byte 6 : NN, 这批短信的数量。如果当前短信是这批短信中的第一条的值是1,第二条的值是2。
例如:05 00 03 39 02 01
用JAVA代码的话可以新建这样一个字节数组,然后后面加上UTF-8转换后的短信内容得字节数组就可以了
 byte[] tp_udhiHead=new byte[6];
tp_udhiHead[0]=0x05;
tp_udhiHead[1]=0x00;
tp_udhiHead[2]=0x03;
tp_udhiHead[3]=0x0A;//每条长短信的唯一标示
tp_udhiHead[4]=(byte)contentArrCount;
tp_udhiHead[5]=0x01;//默认为第一条

注意事项:(从google上搜来的,基本上也就遇到这些问题)
1、TP_udhi设置为 0x01
2、Msg_Content 按TP_udhi协议填写6字节或者7字节的TP_udhi协议头然后加上经过USC2编码的消息内容。由TP_udhi协议头和消息内容体组成的Msg_Content总长度不能超过140个字节
3、Msg_Fmt 设置为 0x08 UCS2编码;
4、Pk_total和Pk_number 可以不设置,如果要设置,就要分别跟TP_udhi的MM和NN字段一致
感觉用JAVA做这样的东西比较麻烦,要转换过来转换过去的.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值