`
shappy1978
  • 浏览: 700741 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SMSLib 备忘录

    博客分类:
  • J2EE
阅读更多

http://www.cnblogs.com/bluespot/archive/2008/08/02/1258735.html

    这是网上装载相当广泛的一篇关于SM Push的文章,里面提到了SMSLib的包,这是一个基于串口控制GPS Modem或者手机包,网上有相当多的介绍,摸索了一天,基本上学会使用了,备忘如下:

 

  • 需要的第三方包,comm.jar,slf4j(slf4j-api-1.5.10.jar,slf4j-jdk14-1.5.10.jar,log4j-over-slf4j-1.5.10.jar),第一个是基于win32平台的串口控制包,后面是日志的,似乎可以搭配不同的log包使用没有深入学习。commons-net-2.0.jar据说需要,可能是用smpp使用到吧,我用串口的话似乎可以不用。
  • 串口可以使com,usb甚至红外,蓝牙,我在5800I上用USB,实际上是com18,smslib里面有一段测试哪个串口连接了手机的类,可以试试
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.Formatter;
import org.smslib.helper.CommPortIdentifier;
import org.smslib.helper.SerialPort;

public class CommTest
{
	private static final String _NO_DEVICE_FOUND = "  no device found";

	private final static Formatter _formatter = new Formatter(System.out);

	static CommPortIdentifier portId;

	static Enumeration<CommPortIdentifier> portList;

	static int bauds[] = { 9600, 14400, 19200, 28800, 33600, 38400, 56000, 57600, 115200 };

	/**
	 * Wrapper around {@link CommPortIdentifier#getPortIdentifiers()} to be
	 * avoid unchecked warnings.
	 */
	private static Enumeration<CommPortIdentifier> getCleanPortIdentifiers()
	{
		return CommPortIdentifier.getPortIdentifiers();
	}

	public static void main(String[] args)
	{
		System.out.println("\nSearching for devices...");
		portList = getCleanPortIdentifiers();
		while (portList.hasMoreElements())
		{
			portId = portList.nextElement();
			if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL)
			{
				_formatter.format("%nFound port: %-5s%n", portId.getName());
				for (int i = 0; i < bauds.length; i++)
				{
					SerialPort serialPort = null;
					_formatter.format("       Trying at %6d...", bauds[i]);
					try
					{
						InputStream inStream;
						OutputStream outStream;
						int c;
						String response;
						serialPort = portId.open("SMSLibCommTester", 1971);
						serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
						serialPort.setSerialPortParams(bauds[i], SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
						inStream = serialPort.getInputStream();
						outStream = serialPort.getOutputStream();
						serialPort.enableReceiveTimeout(1000);
						c = inStream.read();
						while (c != -1)
							c = inStream.read();
						outStream.write('A');
						outStream.write('T');
						outStream.write('\r');
						Thread.sleep(1000);
						response = "";
						c = inStream.read();
						while (c != -1)
						{
							response += (char) c;
							c = inStream.read();
						}
						if (response.indexOf("OK") >= 0)
						{
							try
							{
								System.out.print("  Getting Info...");
								outStream.write('A');
								outStream.write('T');
								outStream.write('+');
								outStream.write('C');
								outStream.write('G');
								outStream.write('M');
								outStream.write('M');
								outStream.write('\r');
								response = "";
								c = inStream.read();
								while (c != -1)
								{
									response += (char) c;
									c = inStream.read();
								}
								System.out.println(" Found: " + response.replaceAll("\\s+OK\\s+", "").replaceAll("\n", "").replaceAll("\r", ""));
							}
							catch (Exception e)
							{
								System.out.println(_NO_DEVICE_FOUND);
							}
						}
						else
						{
							System.out.println(_NO_DEVICE_FOUND);
						}
					}
					catch (Exception e)
					{
						System.out.print(_NO_DEVICE_FOUND);
						Throwable cause = e;
						while (cause.getCause() != null)
						{
							cause = cause.getCause();
						}
						System.out.println(" (" + cause.getMessage() + ")");
					}
					finally
					{
						if (serialPort != null)
						{
							serialPort.close();
						}
					}
				}
			}
		}
		System.out.println("\nTest complete.");
	}
}
  •  串口主要通过AT命令控制手机发送短信,关于AT命令和PDU的结构请参照下面的博客,作者搜集了相当多的资料

http://hi.baidu.com/dtzw/blog/category/Gsm

  • 关于如何向手机指定端口发短信,我搜索了很多资料,可惜没有找到明确的指导资料,有几点要确认的:一般的Short Message Moden(这个关键词的中文居然被和谐了,无聊)和手机短信无法触发注册到特定端口的Midlet,端口数据其实没有写在PDU的结构数据中,而是写在写入短信体的UD中,关于UDHI(User Data Head Indicator)的结构网上没有找到资料,全部都是直接写入短信数据,要了解UDHI还是要自己查SMSLib的代码,它确实可以向指定端口发送短信,不过网上相当多的代码是旧版本的。

 

0
0
分享到:
评论
1 楼 evil850209 2012-09-24  
请问如果我是用一款Android系统的手机,通过USB链接后如何查看那个端口连上的手机?

相关推荐

    smslib-v3.3.0-src.zip_SMSLIB_smslib v3_smslib-3.3.0b2.zip_smslib

    标签中的".smslib_v3"和".smslib-3.3.0b2.zip"、".smslib-3.3.3"、".smslib3.3.3"暗示了该库的不同版本,其中".smslib-3.3.0b2.zip"可能是早期的测试版本,而".smslib-3.3.3"可能是最终稳定版。这显示了SMSLib的更新...

    smslib-v3.2.1.zip_SMS receiving_SMSLIB_SMSLib-Java_java smslib_s

    SMSLib是一个功能强大的Java库,专门用于发送和接收SMS(短消息服务)消息。这个"smslib-v3.2.1.zip"文件包含了该库的版本3.2.1,是一个用于开发SMS应用的工具包。它允许开发者通过Java语言在各种平台上来实现短信...

    smslib

    【smslib】是一个专用于短信开发的Java库,它为开发者提供了一套全面的API,以便于在Java应用程序中发送和接收短信。这个库广泛应用于系统集成、企业级应用以及移动通信解决方案中,使得开发者无需深入理解复杂的...

    smslib-3.5.4.jar

    《smslib-3.5.4.jar:短信猫通信库详解》 smslib-3.5.4.jar 是一个专为短信猫设备提供通信服务的Java库,版本号为3.5.4。这个库的核心功能是使得开发者能够通过编程方式便捷地与短信猫进行交互,实现短信的发送、...

    SMSLib-Java-v1.1.0.zip_SMSLIB_smslib ja_服务平台

    SMSLib是一个功能强大的Java库,专门用于实现短信的发送、接收和管理。它在标题中被称为"SMSLib-Java-v1.1.0.zip_SMSLIB_smslib ja_服务平台",表明这是一个针对Java开发者的资源包,版本号为v1.1.0,且可能包含了...

    smslib-v3.5.2

    **smslib-v3.5.2** 是一个基于Java的库,专为简化短信猫(Short Message Service Modem,简称SMS Modem)的开发而设计。这个库的主要目的是帮助开发者快速构建能够通过短信猫发送和接收短信的应用程序,从而节省在...

    短信猫开发smslib源码

    【短信猫开发smslib源码】是一个用于与短信猫设备进行通信的开源库,主要针对Java平台。smslib是一个功能强大的库,它提供了一种简单而有效的方式来发送和接收通过短信猫设备进行的短消息。这个库对于那些需要在应用...

    smslib java发送短信

    【标题】"smslib java发送短信"涉及到的是Java平台下使用smslib库来实现短信发送的功能。smslib是一个开源的Java库,专为开发者提供发送和接收短信的能力,尤其适用于那些需要通过短信猫(Modem)或其他短信网关进行...

    SMSLib指南以及开发包

    **SMSLib指南及开发包详解** SMSLib是一个强大的开源库,专为Java平台设计,用于发送和接收短信。它提供了一种简单而高效的方式来处理移动通信,尤其在企业级应用中,如自动化通知、客户服务或者远程监控系统。在这...

    smslib .net和java示例

    标题"smslib .net和java示例"表明这是一个关于使用smslib库进行.NET和Java平台上的短信猫(Modem)开发的示例集合。短信猫是一种硬件设备,通常用于通过调制解调器发送和接收短信。 描述中提到"java版本的短信猫...

    smslib 短信开发包

    **smslib短信开发包详解** smslib是一款专为Java开发者设计的开源短信开发库,它提供了丰富的功能,便于开发者在Java应用中集成短信发送和接收功能。smslib的核心特性包括多线程处理、多种接口支持以及一个内置的...

    smslib-3.5.0.jar

    【smslib-3.5.0.jar】是一个Java库,主要服务于短信通信,特别是与“短信猫”(Modem)设备进行交互。这个库在IT领域中被广泛应用于需要通过短信进行通信的系统,比如自动通知、远程控制、监控以及其他需要短信功能...

    smslib-v3.5.1

    【smslib-v3.5.1】是一款基于Java编写的开源库,主要用于通过短信猫(Modem)进行短信的发送和接收。这个库为开发者提供了一种方便、灵活的方式来实现与移动通信设备的交互,从而在各种应用中实现短信功能,如企业...

    Java短信收发;SMSLIB使用;java接收短信;java发送短信

    SMSLIB是一个用Java编写的开源库,它提供了短信发送和接收的功能,为开发者提供了方便的API来实现短信服务。本篇将详细介绍如何使用SMSLIB进行Java短信收发,并结合实际例子进行说明。 首先,理解SMSLIB的核心概念...

    smslib-v3.5.2.zip

    【smslib-v3.5.2.zip】是一个包含smslib库的版本3.5.2的压缩包。smslib是一个开源的Java库,专门用于发送和接收短消息(SMS),支持多种通信协议,如串行端口、蓝牙、GSM modem、3G调制解调器、GSM网络中的SMS中心...

    smslib最新版的api

    SMSLib是一个开源的Java库,专门用于通过各种协议(如GSM、3G、蓝牙、Wi-Fi等)发送和接收短信。它为开发者提供了一种简单且强大的方式来集成短信功能到他们的应用程序中,尤其适合那些需要进行大量短信通信的企业或...

    SMSLIB短信猫发送短信

    【标题】"SMSLIB短信猫发送短信"是一个基于Java编程语言的Eclipse项目,它利用了SMSLIB组件来实现通过串口与短信猫设备进行通信,从而实现短信的发送功能。这个项目对于需要进行批量短信发送或者自动化短信通知的...

    smslib-v3.4.4.zip

    **SMSLib v3.4.4 知识点详解** SMSLib是一个强大的开源库,专为Java平台设计,用于通过串行通信接口控制手机进行短信的发送、接收以及执行其他相关操作。它允许开发者在各种应用程序中集成短信功能,如监控系统、...

Global site tag (gtag.js) - Google Analytics