(转) 最近公司的一个业务,因为每日有百万条以上的短信,出现了严重的短信延迟问题。与运营商沟通之后,允许我们直接连SMSC下行业务短信,不用再通过SMG了。
所以需要通过SMPP来发送。以前做过湖南移动梦网项目,也通过SMPP连过SMSC,依稀记得有现成的SMPP实现API可用,于是google了一把,果然发现开源项目:Java SMPP API@sourceforge.net
把API Download下来一看,呵呵,实现了SMPP协议,还提供了example程序,好用得很。
于是把各项配置弄好,直接在Example上修改了一下,发送了一条短信到自己的手机,英文短信OK!
再试一下中文,问题来了:不论我把中文如何转码,手机收到的都是乱码,晕死!咨询局方技术人员,也说不出一个子丑寅卯,只是告诉我,SMSC是中兴的,中文字符需按照Unicode编码,消息的DCS(Data Coding Schema)设为8即可。
无数次尝试之后,终于发现,把整个Java Project的Text Encoding设为UTF8,然后直接将中文字符串以UTF16格式获取Byte[],即通过语句
byte[] msgBytes = "中文字符串".getBytes("UTF16");
获得byte[]直接丢给SMPP API实现的Submit包即可显示中文,但是还有一个小小的问题,手机显示的字符串前总有一个非常规的字符,这个字符在Samsung手机上显示为一个方框,LG手机上显示为一个空格,Moto手机上显示为一个反黑的空格,非常烦人。比较了一下获取的byte[]的长度,发现确实比文字长度长了两个字节,于是试着把该byte[]的前两个byte去掉再试,果然一切OK了。
运行环境是Redhat Linux AS 3,字符集设置为GB18030。因为找到了上述的workaround来解决中文问题,我没有时间去尝试运行环境字符集设定对中文的影响了。
分享到:
相关推荐
使用SMPP发送短信是一项在企业级应用中常见的功能,它允许开发者使用SMPP(Short Message Peer-to-Peer)协议,与短信中心(SMSC)进行通信,实现短信的发送、接收、报告等功能。在实际应用中,开发者通常会面临实时...
2. **短信提交**:使用“submit_sm”命令,包含短信内容、目标地址、编码格式等信息,将短信发送到SMSC。 3. **状态报告**:通过“submit_sm_resp”、“deliver_sm”等命令获取短信发送的状态报告,如成功、失败、...
本文将深入探讨如何使用SMPP协议和Java编程语言来实现在IT环境中发送短信的功能。SMPP(Short Message Peer-to-Peer)是一种广泛应用于移动通信中的应用层协议,它允许服务提供商与短消息服务中心(SMSC)进行交互,...
例如,bind命令用于建立客户端与SMSC之间的连接,而submit_sm命令则用于发送短信。在源码包中,我们可能找到以下关键组件: 1. **连接管理器**:这部分代码负责建立和维护与SMSC的TCP连接。它可能包含连接的建立、...
一旦建立连接,客户端可以发送SubmitSM请求来发送短信,或者接收DeliverSM响应来接收短信。此外,还支持绑定、解绑、查询状态等多种操作,确保了服务的灵活性和可靠性。 4. **源程序结构**:提到的源程序包含三个包...
- **发送短信**:通过已建立的连接,调用`submit`方法发送`SubmitSM`对象。 - **处理响应**:接收SMSC的响应,确认短信是否成功发送。 - **断开连接**:发送完毕后,释放资源,解除与SMSC的绑定。 4. **源码包...
SMPP协议允许应用服务器通过长连接方式与SMSC保持通信,避免了频繁建立和关闭连接的开销,提高了处理大量短信时的效率。同时,SMPP协议支持批量提交和异步响应,对于处理大规模并发请求具有显著优势。 SMPP协议的...
SMPP连接过程 1. **绑定(Bind)**: 客户端首先需要通过`bind_transmitter`或`bind_receiver`命令与SMSC建立连接,表明其身份和角色。 2. **数据交换**: 经过绑定后,ESME可以使用`submit_sm`发送短信,或者接收...
开发者通过阅读和学习这些源码,可以了解到如何使用Java实现SMPP连接,以及如何设计和优化短信发送流程。同时,也可以根据需求对其进行修改和扩展,以适应特定业务场景。对于想要深入了解电信短信服务或者希望自建...
短信发送协议是通信行业中用于移动网络短信服务的重要标准,这些协议包括CMPP(China Mobile Packet Protocol)、SMPP(Short Message Peer-to-Peer)、SGIP(Short Message Gateway Internet Protocol)以及SMGP...
2. **短信提交(Submitting SMS)**: 经过绑定成功后,客户端可以使用`submit_sm`命令发送短信。该命令包含短信的源地址、目标地址、短信内容等信息。 3. **短信接收(Receiving SMS)**: SMSC接收到短信后,会通过...
**SMPP协议(SP短信开发)** ...总之,SMPP协议是SP短信开发中的核心部分,它定义了如何与SMSC进行有效通信,实现短信的发送、接收和状态报告等功能。理解和掌握SMPP协议对于构建可靠的短信服务系统至关重要。
`SubmitSM`用于发送短信,`DeliverSM`用于接收短信。源码中可能会有对应的类来封装这两个操作,包括设置消息属性(如源地址、目标地址、短信内容等)和处理响应。 6. **错误处理与重试机制**:由于网络环境的不稳定...
SMGP协议定义了短信中心(SMSC)与业务平台之间的通信规范,使得企业可以方便地接入电信网络发送短信。 SGIP(Short Message Internet Push)是中国联通的短信互联网推送协议,适用于大规模、高速率的短信发送需求...
3. **短信提交**:使用`submit_sm`命令,包含短信的内容、目标手机号码、服务类型等信息,向SMSC发送短信请求。 4. **接收短信**:当ESME处于Receiver或Transceiver模式时,可以接收`deliver_sm`命令,这是SMSC发送...
### 小灵通短信协议SMPP标准文档知识点详解 #### 一、SMPP协议简介 SMPP(Short Message Peer-to-Peer Protocol)是一种用于在移动网络运营商之间交换短消息的应用层协议。它允许第三方实体(如ESME, External ...
2. **客户端API**:提供了一组接口和类,使开发者能够方便地与SMPP服务器进行交互,如建立连接、发送短信、接收短信、处理响应等。 3. **示例应用**:可能包含一些简单的示例程序,演示如何使用该库来实现基本的...
在本源码包中,开发者可以找到如何在Java中实现SMPP连接、会话管理、数据编码解码以及消息发送和接收的详细代码。 1. **SMPP连接与会话管理** 在Java中,通常使用开源库如jsmpp(Java SMPP library)来实现SMPP...
3. **绑定操作**:在使用SMPP发送短信前,客户端必须先进行bind操作,选择作为transmitter(只发送)、receiver(只接收)或tranciver(发送和接收)。bind过程需要提供系统ID、密码和其他身份验证信息。 4. **短信...
1. **短信验证码发送**:应用通过SMPP协议向SMSC发送短信验证码,用于用户身份验证。 2. **企业短信推送**:企业使用SMPP接口批量发送营销短信或通知。 3. **实时监控系统**:利用心跳机制实时监控网络连接状态,...