- 浏览: 140441 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
puyancheng1988:
哥们儿,我用的jfreechart在linux服务器上生成的图 ...
JFreeChart图表 -
soujava:
...
Linux下Oracle自动备份脚本 -
skylikeblue:
...
基于JAVA实现的手机收发短消息系统
0 引 言
目前基于GSM网络的短消息应用越来越多。由于采用短消息进行数据传输可以直接利用现有的GSM网络的资源,不需要组建专用的通信网络。另外,采用短消息进行数据通信具有费用低等特点,因此基于GSM短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,这些系统能广泛用于远程监控、定位导航、个人通信终端等。目前,利用JAVA语言实现的手机短消息收发系统基本没有。针对目前这种情况,本文介绍一种采用JAVA语言实现的手机短消息收发系统,该系统能够正确的收发短消息,并能长时间的稳定运行,因此该系统在办公系统、物流系统中有广阔的应用前景。另外,由于JAVA语言能够实现跨平台运行,因此该系统不仅可以在Windows平台下运行,而且还可以在Unix平台下运行,从而进一步扩展了系统的应用空间。
1 实现的原理
一般PC机都有串口,手机也有数据口,利用手机的数据线将PC机的串口与手机的数据口连接起来,为PC机与手机间提供了数据通信的物理链路。PC机通过向手机发送AT命令来控制手机,在此基础上实现短消息的收发操作。手机收发短消息的AT命令主要有:AT+CMGS和AT+CMGR,具体的AT命令参考GSM07.05规范。该系统软件在设计时采用分层实现的思想,这样可以将任务分层处理,使软件具有模块性和伸缩性,也为软件升级和功能扩展提供良好的接口。图1为软件的分层模型。
串口通信层主要是完成数据通信的任务,这一层包括通信帧格式、通信速度等的处理,该层为它的上一层提供数据通信的通道,进行数据的收发处理。AT命令分析层主要完成各个AT命令的分析,即按照AT命令进行数据封装,将封装后的数据交给下一层进行数据发送;接收来自下层的数据,并对接收到的数据进行解包,将接收到的数据交给上层处理。用户应用处理层主要是完成所有用户有关的操作,该层可以根据不同的应用实现不同的处理,该层还可以根据用户新的需要进行相应的扩充,使软件具有很大的处理灵活性。
2 串口通信层的实现
采用JAVA实现的串口通信与其它语言实现的串口通信概念上一致,都需要打开串口,然后操作串口,处理串口事件,从而实现数据的收发。采用JAVA语言实现的串口通信需要引入适当的jar文件,因此在import部分需要加入“import javax.comm.*”和“import com.sun.comm.*”两个语句,从而能使用低层的资源。串口通信是全双工的通信,在软件设计的时候采用异步通信的方式,即收发不同步。在接收数据的时候是根据串口的事件来进行数据获取。为了避免在接收数据的时候出现“脏读”和“脏写”的情况发生,在此使用“生产者-消费者”模型,并结合JAVA语言的同步机制实现串口通信层与AT命令分析层的数据交互。串口通信层的实现框图如图2所示。
图2 串口通信层实现框图
通过图2可以看出,串口通信层主要包括串口的初始化,获得串口的实例,并设置好通信的格式。在串口初始化后,需要打开串口事件的监听,并启动发送数据的线程,以实现分别对接收和发送的检测。当有数据到达或者有数据需要发送时,则进行相应的接收或者发送处理,如果没有数据到达或者没有数据需要发送,则继续监听和检测处理。在数据接收或者数据发送的时候,需要与AT命令层进行数据交互,为了保证数据的有效性,数据交互采用“生产者-消费者”模型处理。下面具体分析采用JAVA语言实现串口通信的程序片段。以下代码基本上都需要进行相应的异常处理,这里限于篇幅不进行详细的介绍。
下面给出串口初始化的代码片段。在打开串口之前需要加载驱动程序,使用以下语句实现串口的打开:
//驱动加载
Win32Driver wDriver = new Win32Driver();
wDriver.initialize();
portId = CommPortIdentifier.getPortIdentifier
(strName);
//打开串口
m_Port=(SerialPort)portId.open("SMSAPP", 2000);
//获得数据输入流
m_InStream = m_Port.getInputStream();
//获得数据输出流
m_OutStream = m_Port.getOutputStream();
以上的语句主要用于打开串口,获得串口的实例。其中“Win32Driver wDriver = new Win32Driver();wDriver.initialize();”语句实现加载驱动程序,该语句是必须的,如果没有的话,在有的机器上不能正确运行。
m_Port.setSerialPortParams(19200, DATABITS_8, STOPBITS_1, PARITY_NONE);
m_Port.setRTS(true);
m_Port.addEventListener(this);
m_Port.notifyOnDataAvailable(true);
以上的语句实现串口的参数的设置,即设置串口的通信速率、数据位、停止位以及奇偶校验位等,并添加串口事件,当有数据到达时则触发事件。
下面介绍串口收发数据的程序代码片段,这里只是介绍串口通信的读写操作,而关于其它的操作这里不作详细介绍。以下代码可以实现串口通信的数据的收发。
private void SendData(byte []m_nInData) throws IOException
{
try
{
//通过输出流实现数据发送
for(int i = 0;i < m_nInData.length;i++)
{
m_OutStream.write(m_nInData[i]);
}
}
catch(IOException e) { throw e; }
}
public void serialEvent(SerialPortEvent event)
{
int nLen = 0;
switch(event.getEventType())
{
//数据到达
case SerialPortEvent.DATA_AVAILABLE:
{
byte[] readBuffer = new byte[20];
try
{
while(m_InStream.available()>0)
{
//通过输入流接收数据
nLen=m_InStream.read(readBuffer);
}
}
catch (IOException e) {}
break;
}
default:break; //其它事件暂时没有处理
}
}
通过上面的程序代码可以看出:串口数据的发送和接收都是基于输出流和输入流进行处理的。以上代码只是简单实现了串口数据的收发操作,串口数据的接收在串口事件里面进行处理。在实际的应用中,需要考虑数据的有效性,即实现数据的保护与交互。在串口通信层使用了专门的一个类(Semaphore)来实现与其它层之间进行数据交互时的数据保护,并利用一个类(DataStruct)来实现数据的交互,具体的程序代码,这里不进行详细介绍。
3 AT命令分析层的实现
PC机通过串口向手机发送用于短消息操作的AT命令,从而实现控制手机收发短消息的操作。通常情况下,AT命令以字母“AT”开头,以ASCII码为13的字符结尾,比如“AT+CMGS=<length><CR> PDU is given <ctrl-Z/ESC>”命令就用于实现PDU格式的短消息的发送。AT命令分析层位于串口通信层之上,因此该层只是实现短消息AT命令的封装和解析。短消息的发送有文本模式和PDU模式,考虑到系统应用的广泛性,这里只讨论PDU模式。该层主要实现短消息相关操作的命令。在短消息的操作命令中,主要是发送短消息命令和读短消息命令相对复杂,这里主要对这两个操作进行分析。
3.1 短消息发送的实现
PDU格式的短消息发送的AT命令为“AT+CMGS=<length><CR> PDU is given <ctrl-Z/ESC>”。先发送完长度字节后,必须等待手机模块的响应,当响应为“>”时,则继续发送PDU数据包,最后以“ctrl-Z”结束。PDU数据包有具体的帧结构,因此必须按照PDU数据包的格式进行封装数据。图3为手机侧发送PDU数据包的帧格式。
图3(a)给出了发送时帧的格式。在PDU数据包的帧结构中,“SMSC”字段为短消息中心的地址;“PDU类型”来指明数据包的类型;“MR”数据包是表示发出信息;“DA”为目的地址;“PID”为协议识别号;“DCS”为短消息的编码格式,对于数字或者字符采用编码值为“00”,如果内容是汉字的话,则采用的编码值为“08”,采用的是UNICODE编码方式;“VP”表示短消息的有效时间;“UDL”表示数据内容的长度;“UD”为具体的短消息内容。这里需要强调的是:在PDU数据包里面,所有的数字是以字符形式发送的,也就是需要将整数转换成字符形式发送(比如整数23需要转换成‘2’和‘3’进行分别发送)。在帧中,“SMSC”和“DA”字段的每个字节按照BCD编码,每个字节高低顺序交换,如“683108200305F0”表示的实际SMSC的号码为“8613800230500”。
3.2 短消息接收的实现
PDU格式的短消息接收的AT命令为“AT+CMGR=index”,这里index为短消息存储的具体位置,发送的时候必须将该整数值转换成字符形式。在发送完了读取短消息的AT命令后,手机会给出响应,响应的数据就包括短消息的内容。同样,响应数据也是PDU格式的数据帧。接收数据PDU格式包与发送数据的PDU格式包中的字段有所不同,图3(b)为手机侧接收PDU数据包的帧格式。
在接收PDU数据包的帧结构中,“SMSC”字段为短消息中心的地址;“PDU类型”来指明数据包的类型;“OA”为源地址;“SCTS” 表示短消息到达业务中心的时间;其余的各个字段与发送时的帧格式时一样的。在PDU数据包里面,所有的内容也是是以字符形式存在的。同样,在帧中,“SMSC”和“OA”字段的每个字节按照BCD编码,每个字节高低顺序交换。按照帧格式中各个字段,对响应数据进行解析就可以得到短消息的内容。
以上分析了短消息的发送和接收。在具体程序的实现的时候,严格按照帧格式进行封装数据或者解析就可以了。
4用户应用处理层的实现
用户应用处理层主要是针对不同的应用处理提供不同的功能,用户也可以在这层上增加自己的功能,这样可以保证软件的伸缩性和开放性。在应用层必须要完成几个基本的功能,即:短消息内容的编码功能、字节转换成字符串、字符串转换成字节流等功能模块。为了考虑到任务的突发性,应用层采用排队机制并结合“生产者-消费者”模型来进行处理。图5为应用层的处理框图。
图4 应用层处理框图
由图4可以看出,应用层将需要发送的数据放入到入队列里,然后利用“生产者-消费者”模型保证数据的有效性,防止数据的“脏读”和“脏写”。应用层取出需要发送的数据进行相应的处理(比如编码等)后,将数据交给AT命令分析层处理。应用层从AT命令分析层获得数据,进行相应处理(比如解码等),处理完后,将处理的最终数据放入到出队列里,供用户使用,同样这里也需要借助“生产者-消费者”模型来保证数据的有效性。
在该层中,主要是根据具体的应用来实现相应的代码。通过该层软件,完成特定的用户处理,将处理后的数据交给AT命令分析层进行数据封装,将封装后的数据交给通信层进行发送,从而实现数据以短消息的形式发送;对接收到的数据按照相反的处理就可以获得接收到的数据。基于以上通信过程,可以实现数据点对点的通信。
5 结束语
以上介绍了采用JAVA语言实现的手机短消息的收发系统。该系统在软件设计的时候按照分层设计,这样既可以保证整个软件模块性,又能保证软件的伸缩性,便于将来对软件进行扩展和升级。在该系统软件中,通信层能实现数据的收发,并且加入监视线程,使该层具有非常高的健壮性,可以长时间运行。AT命令分析层能实现AT命令的封装和解析,也可以增加对其它AT命令的封装和解析,使该层能适应将来功能的扩展。应用层能根据不同的应用进行相应的处理,保证软件的开发性,也便于开展新的功能和业务。经过长时间的运行测试,该系统能够稳定运行,不会造成数据丢失,因此该系统已经成功用于一家公司的物流平台。另外由于该系统的软件具有伸缩性和开放性,因此该系统将会在远程监控、无线办公等应用领域有非常广阔的应用前景。
发表评论
-
Cannot access NLS data files问题的解决办法
2008-10-24 15:14 1424我用的myeclipse 6.5版本,oracle是10g版 ... -
Java Web定时任务
2008-10-28 10:04 542在工程的WEB-INF\web.xml配置文件中加入如下三行, ... -
BeanUtil常用方法
2008-10-31 14:25 895Apache Common BeanUtil是一个常用的在对 ... -
安装Visual Editor
2008-11-03 17:05 1246在Eclipse 3.3.2中安装Visual Editor ... -
BeanUtils.copyProperties出现了问题的原因
2008-11-11 15:16 1121使用BeanUtils.copyProperties( des ... -
Servlet/Jsp性能优化
2008-03-05 16:21 710你的J2EE应用是不是运行的很慢?它们能不能承受住不断上升的访 ... -
系统构建高性能J2EE应用的五种核心策略
2008-03-05 16:26 622于J2EE,我们知道当开发 ... -
JFreeChart图表
2008-03-05 16:30 1600在我们编程时如果要把结果显示成图表形式,就离不开JFreeCh ... -
使用JFreeChart 在网站中使用走势图
2008-03-05 16:35 989生活中我们经常用到各种图表,走势图就是其中的一种,例如:股票走 ... -
JFreeChart综合应用
2008-03-05 16:40 739JFreeChart是一个开源的JAVA项目,它主要用来开发各 ... -
要成为Java高手需要注意的25个学习目标
2008-04-05 14:16 5481、你需要精通面向对象 ... -
使用Axis开发Web Service实例
2008-06-03 15:40 842一、Axis安装 1、环境 J2SE SDK 1.3 or 1 ... -
Java实现HTTP的断点续传
2008-06-05 10:39 629(一)断点续传的原理 其实断点续传的原理很简单,就是在Ht ... -
java串口编程
2008-06-05 11:00 1210一年半前在jbuilder2006下写过串口通信程序,最近做一 ... -
Java串行端口技术协议
2008-06-05 11:06 783串行通讯协议有很 ... -
多国语表单提交乱码问题
2008-06-30 10:43 7881、所有文件都以-utf-8编码格式保存 2、所有文件都设置 ... -
网站跨站点单点登录
2008-07-03 13:20 1088昨天和几位朋友探讨到 ... -
FreeMarker概述
2008-07-03 14:43 729快速入门 (1)模板 + ... -
使用FreeMarker生成Html静态文件(实例)
2008-07-04 10:31 756以下是我在生成新闻的静态文件时用到的代码.仅供参考.请根据实际 ... -
FreeMarker学习手册
2008-07-04 17:11 821(1)模板 + 数据模型 = 输 ...
相关推荐
通过以上技术的综合运用,Java构建的短消息平台能够实现高效、安全的网络收发信息功能,满足不同场景下的需求。随着技术的不断发展,这种平台还在持续进化,以适应更快的数据传输速度、更丰富的媒体类型以及更高的...
本项目“基于JAVA的短信收发代码”提供了一种实现短信通信的方法,非常适合初学者学习和开发者实践。接下来,我们将深入探讨相关的Java短信收发技术。 一、Java SMS API 在Java中,我们可以利用Java ME(Mobile ...
Java手机短信收发程序是一种基于Java编程语言实现的软件,用于发送和接收手机短信。这个程序的核心在于利用Java的Socket通信技术以及相关的SMS协议来与移动运营商的短信网关进行交互。下面将详细介绍该程序涉及的...
基于JAVA CS远程监控系统软件的实现(源代码+WORD论文文档论文) 基于JAVA C/S远程监控系统软件的实现 摘 要 近年来,网络技术的不断发展,为远程监控技术的发展创造了条件。远程监控系统软件越来越受到人们的重视,...
实现串口收发短消息的关键步骤包括: 1. **硬件配置**:选择合适的GSM/GPRS模块,并确保其正确连接到计算机的串口。通常需要设置串口的波特率、数据位、停止位和校验位,这些参数应与模块手册中的推荐值一致。 2. ...
用Java网络编程实现主控端和被监控端的通讯(命令收发、数据传送),用Java图形编程完成主控端控制界面的编写。具体应用如下: 1.实现主控端(服务器)与被监控端(客户端)之间的通讯。 ——用Java Socket来实现。...
电子邮件系统采取Linux操作系统下的邮件服务器系统,利用脚本语言捕捉邮件到达事件,触发邮件到达机制,同基于J2EE框架的系统相结合,通过SMTP和POP3协议收发邮件,通过短消息发送到用户手机上。 知识点4:手机邮件...
此外QQ还具有BP机网上寻呼、聊天室、传输文件、语音邮件、手机短讯服务等功能,QQ不仅仅是虚拟的网络寻呼机,更可与传统的无线寻呼网、GSM移动电话的短消息系统互联,目前QQ和全国多家寻呼台、移动通信公司有业务...
利用JSP技术开发论坛短消息系统,可以实现用户间的实时交流,增强社区互动性。在这个系统中,我们将探讨JSP的核心概念,以及如何结合其他技术来构建一个功能完备的论坛短消息模块。 1. **JSP基本原理** JSP是基于...
在本文中提到的以短信息平台为基础的校园网服务系统中,服务器为数据库与终端用户链接的纽带,即上文提收稿日期。客户既是请求的发出者,也是最终结果的接收人。服务器端通过GSM实现与手机的通信互通,得到用户发出...
SMPP(Short Message Peer-to-Peer)协议是实现这种服务的一种开放标准,它为短信中心(SMSC)与短消息实体(如手机应用或服务器)之间的交互提供了一种可靠的方式。在这个基于SMPP协议的Java点对点短信发送源码包中...
该软件基于Java编写,采用标准的POP3协议与邮件服务器通讯,采用RS232实现手机对手机或HTTP方式实现WEB对手机的短信息SMS发送。还可以通过CMPP协议与中国移动短消息网关相连。可以独立运行在各种装有java运行环境的...
在本文中,我们将探讨如何使用第三方控件来最小化编程工作量,高效地实现短信猫的收发短信息功能。 首先,我们需要了解短信猫的工作原理。短信猫通常基于GSM或3G技术,它们连接到SIM卡并模拟手机的功能。通过AT命令...
论文《基于Java的移动通讯技术研究》可能涵盖了以上各个方面的理论分析和实际案例,详细讨论了如何利用Java技术解决移动通信中的问题,以及如何提升用户体验。此外,附带的文件列表中包含多个图片文件,可能是论文中...
2. **SMS/MMS协议**:GSM手机彩信涉及到短消息服务(SMS)和多媒体消息服务(MMS)。SMS用于发送文本消息,而MMS可以发送包括图片、音频和视频在内的多媒体内容。MMS使用WAP(Wireless Application Protocol)协议栈...
本文提出了一种基于J2ME的短消息管理系统设计方案,该方案充分利用了J2ME平台的强大功能,结合PUSH机制和MVC架构等技术,实现了高效、实用的短信管理功能。这对于提高用户的移动通信体验、促进移动应用的发展具有...
1. **SMPP协议**:SMPP(Short Message Peer-to-Peer)是用于短消息传递的开放标准协议,Java SMS系统通过SMPP连接到短信网关,实现短信的收发。 2. **线程管理**:为了处理并发的短信发送请求,系统需要有效的线程...
2个目标文件 摘要:Java源码,网络相关,UDP 基于JAVA的UDP服务器模型源代码,内含UDP服务器端模型和UDP客户端模型两个小程序,向JAVA初学者演示UDP C/S结构的原理。 简单聊天软件CS模式 2个目标文件 一个简单的CS模式...