Java串口与手机通信

简介:
最近公司没事找事,本来想干的事情又被耽误了……不连贯啊~~~555555555555……

 半夜睡不着觉,想起博客又一段时间没更新了,准备写点新内容。

————————————————————————————————————————————

 众 所周知,SMS(Short Messaging Service)即短消息业务,是由Etsi所制定的一个规范(GSM 03.40 和 GSM03.38)。当使用其7-bits编码时,可以发送最多160个字符;使用8-bit编码,最多可以发送140个字符,通常无法直接通过手机显 示;还有用16-bit编码时,最多70个字符,被用来显示Unicode(UCS2)文本信息,可以被大多数的手机所显示。由于SMS是目前大众所使用 的几大主流信息传递手段之一,虽然鄙人并不从事短信服务开发,但作为一个程序员来讲始终艺不压身,尤其最近十一期间业余接触了相关资料(给朋友群发短信 玩……),因此准备将一些资料放在博客上以供有需要者参考。

 目前来说,短信的软件发送大体有三种途径:

1、 网关方式:就是向当地的电信部门申请,不需要额外的设备,利用对方提供的API调用程序发送短信,适用于大型的通信公司,像华为、傲天、中兴、亚信等。
2、 终端方式:就是借助像GSM MODEM之类的设置(支持AT指令的手机也行),通过数据线连接电脑,来发送短信,用这种方法比较适用于小型及个人。要实现这种方式必须理解串口通信、AT指令、短信编码、解码。
3、 利用网站实现,由网站代发短信数据,对网站依赖性太高,对网络的要求也比较高,不适于进行项目开发。
 
  由于我是个人使用,所以本文选择了AT命令方式作为讲解。

 所 谓AT,即Attention。AT命令集是从Terminal Equipment或Data Terminal Equipment向Terminal Adapter或Data Circuit Terminating Equipment发送的,通过TA、TE发送AT命令来控制Mobile Station的功能与GSM网络业务进行交互。我们可以通过AT命令进行呼叫短信、电话本、数据业务、补充业务、传真等方面的控制。

 在Java编程中,我们可以通过Java Comm进行手机与电脑的串口通讯,以此通过AT指令控制手机操作。

 在Google code上有一名为SMSLib的项目,是一个以AT指令实现手机操作的组件( [url]http://code.google.com/p/smslib/downloads/list[/url]),有兴趣者可以直接下载并使用。

 但由于AT指令操作是非常之简单的,我们完全可以自己写组件完成相关操作,而且针对联通、移动、小灵通等不同的服务需求,自制组件反而更容易控制及扩充,故此我也写了一个简单的SMS组件发布在此文中。

 使用示例如下:

  1. package org.test;

  2. import org.loon.framework.test.sms.SMS;
  3. import org.loon.framework.test.sms.SMSImpl;

  4. /**
  5.  * Copyright 2008
  6.  * 
  7.  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
  8.  * use this file except in compliance with the License. You may obtain a copy of
  9.  * the License at
  10.  * 
  11.  * [url]http://www.apache.org/licenses/LICENSE-2.0[/url]
  12.  * 
  13.  * Unless required by applicable law or agreed to in writing, software
  14.  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  15.  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  16.  * License for the specific language governing permissions and limitations under
  17.  * the License.
  18.  * 
  19.  * @project loonframework
  20.  * @author chenpeng
  21.  * @email:[email]ceponline@yahoo.com.cn[/email]
  22.  * @version 0.1
  23.  */

  24. public class SendManager {
  25.     public static void main(String[] args) throws Exception {
  26.         SMS sms = new SMSImpl();
  27.         // 与默认手机端口建立通讯
  28.         sms.begin();
  29.         // 发送短信,1:目标手机号码,比如13010112500 2:短信内容,默认使用pdu模式,7-bit编码
  30.         sms.getDriver().sendMessage("13010112500","收到此短信者速速请我吃饭,仿膳标准即可,神兵火急如律令111……");
  31.         // 关闭通讯
  32.         sms.end();
  33.     }
  34. }

本文转自 cping 51CTO博客,原文链接:http://blog.51cto.com/cping1982/129618

相关文章
|
2月前
|
Java 调度
[Java]线程生命周期与线程通信
本文详细探讨了线程生命周期与线程通信。文章首先分析了线程的五个基本状态及其转换过程,结合JDK1.8版本的特点进行了深入讲解。接着,通过多个实例介绍了线程通信的几种实现方式,包括使用`volatile`关键字、`Object`类的`wait()`和`notify()`方法、`CountDownLatch`、`ReentrantLock`结合`Condition`以及`LockSupport`等工具。全文旨在帮助读者理解线程管理的核心概念和技术细节。
38 1
[Java]线程生命周期与线程通信
|
17天前
|
Java
JAVA多线程通信:为何wait()与notify()如此重要?
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是实现线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件满足时被唤醒,从而确保数据一致性和同步。相比其他通信方式,如忙等待,这些方法更高效灵活。 示例代码展示了如何在生产者-消费者模型中使用这些方法实现线程间的协调和同步。
31 3
|
5月前
|
Java
实现Java多线程中的线程间通信
实现Java多线程中的线程间通信
|
2月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
2月前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
19 1
|
2月前
|
安全 Java 开发者
Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用
本文深入解析了Java多线程中的`wait()`、`notify()`和`notifyAll()`方法,探讨了它们在实现线程间通信和同步中的关键作用。通过示例代码展示了如何正确使用这些方法,并分享了最佳实践,帮助开发者避免常见陷阱,提高多线程程序的稳定性和效率。
38 1
|
2月前
|
Java
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。
在Java多线程编程中,`wait()` 和 `notify()/notifyAll()` 方法是线程间通信的核心机制。它们通过基于锁的方式,使线程在条件不满足时进入休眠状态,并在条件成立时被唤醒,从而有效解决数据一致性和同步问题。本文通过对比其他通信机制,展示了 `wait()` 和 `notify()` 的优势,并通过生产者-消费者模型的示例代码,详细说明了其使用方法和重要性。
26 1
|
2月前
|
Java
|
2月前
|
前端开发 小程序 Java
java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机
这篇文章介绍了Java中Map的遍历方法、使用Pattern和matches进行正则表达式匹配,以及后端向前端传输图片并保存到手机的三种情况。
21 1
|
2月前
|
Java
用java实现Client和Server之间的互相通信
本文介绍了如何使用Java实现客户端和服务器之间的通信,包括服务器端创建ServerSocket、接受客户端连接、读取和发送消息,以及客户端创建Socket连接、发送和接收消息的完整过程。
34 0
用java实现Client和Server之间的互相通信