欢迎来到天天文库
浏览记录
ID:34457670
大小:36.93 KB
页数:5页
时间:2019-03-06
《基于java实现的手机收发短消息系统》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、基于JAVA实现的手机收发短消息系统摘要:介绍一种采用JAVA语言实现的手机收发短消息的系统。该系统通过PC机向手机发送AT命令来实现短消息的收发功能。本文先介绍JAVA语言的串口数据读写的实现,然后介绍利用AT命令实现短消息的收发。关键词: 串口通信;短消息;AT命令;PDU模式0 引言 目前基于GSM网络的短消息应用越来越多。由于采用短消息进行数据传输可以直接利用现有的GSM网络的资源,不需要组建专用的通信网络。另外,采用短消息进行数据通信具有费用低等特点,因此基于GSM短消息功能可以做成传输各种检测、监控数据信号和控制命令的数据通信系统,这些系统能广泛用于远程监控、定位导航、个人通信
2、终端等。目前,利用JAVA语言实现的手机短消息收发系统基本没有。针对目前这种情况,本文介绍一种采用JAVA语言实现的手机短消息收发系统,该系统能够正确的收发短消息,并能长时间的稳定运行,因此该系统在办公系统、物流系统中有广阔的应用前景。另外,由于JAVA语言能够实现跨平台运行,因此该系统不仅可以在Windows平台下运行,而且还可以在Unix平台下运行,从而进一步扩展了系统的应用空间。1实现的原理 一般PC机都有串口,手机也有数据口,利用手机的数据线将PC机的串口与手机的数据口连接起来,为PC机与手机间提供了数据通信的物理链路。PC机通过向手机发送AT命令来控制手机,在此基础上实现短消息的
3、收发操作。手机收发短消息的AT命令主要有:AT+CMGS和AT+CMGR,具体的AT命令参考GSM07.05规范。该系统软件在设计时采用分层实现的思想,这样可以将任务分层处理,使软件具有模块性和伸缩性,也为软件升级和功能扩展提供良好的接口。图1为软件的分层模型。 串口通信层主要是完成数据通信的任务,这一层包括通信帧格式、通信速度等的处理,该层为它的上一层提供数据通信的通道,进行数据的收发处理。AT命令分析层主要完成各个AT命令的分析,即按照AT命令进行数据封装,将封装后的数据交给下一层进行数据发送;接收来自下层的数据,并对接收到的数据进行解包,将接收到的数据交给上层处理。用户应用处理层主
4、要是完成所有用户有关的操作,该层可以根据不同的应用实现不同的处理,该层还可以根据用户新的需要进行相应的扩充,使软件具有很大的处理灵活性。2串口通信层的实现 采用JAVA实现的串口通信与其它语言实现的串口通信概念上一致,都需要打开串口,然后操作串口,处理串口事件,从而实现数据的收发。采用JAVA语言实现的串口通信需要引入适当的jar文件,因此在import部分需要加入“importjavax.comm.*”和“importcom.sun.comm.*”两个语句,从而能使用低层的资源。串口通信是全双工的通信,在软件设计的时候采用异步通信的方式,即收发不同步。在接收数据的时候是根据串口的事件来进
5、行数据获取。为了避免在接收数据的时候出现“脏读”和“脏写”的情况发生,在此使用“生产者-消费者”模型,并结合JAVA语言的同步机制实现串口通信层与AT命令分析层的数据交互。串口通信层的实现框图如图2所示。 图2 串口通信层实现框图 通过图2可以看出,串口通信层主要包括串口的初始化,获得串口的实例,并设置好通信的格式。在串口初始化后,需要打开串口事件的监听,并启动发送数据的线程,以实现分别对接收和发送的检测。当有数据到达或者有数据需要发送时,则进行相应的接收或者发送处理,如果没有数据到达或者没有数据需要发送,则继续监听和检测处理。在数据接收或者数据发送的时候,需要与AT命令层进行数据交互,为
6、了保证数据的有效性,数据交互采用“生产者-消费者”模型处理。下面具体分析采用JAVA语言实现串口通信的程序片段。以下代码基本上都需要进行相应的异常处理,这里限于篇幅不进行详细的介绍。 下面给出串口初始化的代码片段。在打开串口之前需要加载驱动程序,使用以下语句实现串口的打开://驱动加载Win32DriverwDriver=newWin32Driver(); wDriver.initialize();portId=CommPortIdentifier.getPortIdentifier(strName);//打开串口m_Port=(SerialPort)portId.ope
7、n("SMSAPP",2000);//获得数据输入流m_InStream=m_Port.getInputStream(); //获得数据输出流m_OutStream=m_Port.getOutputStream(); 以上的语句主要用于打开串口,获得串口的实例。其中“Win32DriverwDriver=newWin32Driver();wDriver.i
此文档下载收益归作者所有