- 浏览: 196452 次
- 性别:
- 来自: 北京
最新评论
-
zeroliu:
测试评论。。。
UMP编程比赛:封装TCP连接池和DAL客户端接口库。(7.27更新) -
zeroliu:
新的代码,有一个平滑压缩的处理,还有变灰的处理。
impor ...
Java小程序:批量图片处理(缩小和添加Logo) -
小冰糕:
<div class="quote_title ...
学习笔记:Java串口编程(短信Modem). -
salever:
不错,
学习笔记:Java串口编程(短信Modem). -
zeroliu:
我发现本帖,在blog栏目已经找不到了,搜索也不行,不知道什么 ...
反编译android应用,降低权限反吸费和隐藏广告,重新打包和签名【原创】
最终目标:在Linux下提供一个稳定可靠的Java短信发送服务器。
第一阶段:在Win32平台下编码并测试;
第二阶段:在Linux平台下部署并测试;
目录:
相关资源:(Java Communication包)
Win32串口编程前期准备
Win32短信Modem的测试步骤和AT指令:
Linux串口编程前期准备
列出系统所有串口、并口,来找到短信Modem所使用的串口名字
测试串口速率
Win32/Linux下串口编程的差异
Win32/Linux下串口编程(屏蔽平台差异)
Win32/Linux下加载Java串口驱动
-------------------------
相关资源:(Java Communication包)
comm3.0_u1_linux.zip http://www.sun.com/download/products.xml?id=43208d3d
comm2.0.3.zip (for solaris)
javacomm20-win32.zip http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip
rxtx-2.1-7-bins.zip http://www.frii.com/~jarvi/rxtx 支持Windows/MacOS/Solaris/Linux四个平台
注:在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用,google一下就可以下载到。当然,也可以用开源的Rxtx实现串口通信
Win32串口编程前期准备
1,unzip javacomm20-win32.zip 到c:\下
2,copy c:\commapi\win32com.dll c:\jdk1.4.2\bin
3,copy c:\commapi\javax.comm.properties c:\jdk1.1.6\lib
4,copy c:\commapi\comm.jar c:\jdk1.1.6\lib
5,set CLASSPATH=c:\jdk1.1.6\lib\comm.jar;%classpath%
6,如果使用USB口的GSM-Modem,则还需要安装,USB-to-Serial的驱动:http://www.jingweigps.com/xzzx.htm (经纬星航)
Win32短信Modem的测试步骤和AT指令:
1,安装USB驱动:(http://www.jingweigps.com/xzzx.htm 经纬星航 USB接口 GSM/GPRS MODEM驱动程序 )
2,打开设备管理器,看看是使用了哪个COM口(显示USB-to-Serial的为COM15),右键选择属性,查看速率为115200
3,使用Windows的超级终端,连接COM15,设定速率115200,其他缺省;
4,以TEXT模式测试发送短信
Linux串口编程前期准备
1,unzip comm3.0_u1_linux.zip 到/home/appusr/JavaComm下
2,cp /home/appusr/JavaComm/libLinuxSerialParallel.so /usr/lib
3,cp /home/appusr/JavaComm/javax.comm.properties /usr/java/j2sdk1.4.2_11/lib
4,cp /home/appusr/JavaComm/comm_linux.jar /usr/java/j2sdk1.4.2_11/lib
5,set CLASSPATH=.:/home/appusr/JavaComm/comm_linux.jar:$CLASSPATH
6,export LANG=zh_CN.GBK #设置中文,否则针对短信进行UCS2编码不正确。
注1:如果没有ROOT权限,可以直接执行如下命令:
注2:针对javax.comm.properties的搜索顺序如下:
列出系统所有串口、并口,来找到短信Modem所使用的串口名字
串口编程速率测试:使用AT指令测试串口速率,高速不一定兼容低速(发送命令,返回OK则表示握手成功)
Win32/Linux下串口编程的差异
1,加载的驱动名字不同(com.sun.comm.Win32Driver | com.sun.comm.LinuxDriver)
2,Win32需要单独加载动态库:System.loadLibrary("win32com")
3,所使用的串口名字不同(COM15 | /dev/ttyS0),后者可能还需要root权限。
4,速率可能不一样;
Win32/Linux下串口编程(屏蔽平台差异)
Win32/Linux下加载Java串口驱动
下一步工作(20070813):
1,定义独立的服务器,提供http对外接口。(已完成)
2,提供任务队列处理,控制发送流量。(已完成)
3,对WapPush的支持。(已完成)
4,对OMADRM中DRC的支持。(和3一样);
5,测试3和4的超长短信(完成)
6,测试普通文本的超长短信(未完)。
我怎么配置都是串口为空异常。。。笔记本上没有串口也就算了,在台式机上也是这样。。。这肿么搞呀。。
前几天我也在弄串口通讯,也是得到空的。今天重新配置,发现配置文件没有配置正确。说明文件中的说明是错误的,<JDK_HOME>\jre\bin\win32com.dll<JDK_HOME>\jre\lib\javax.comm.properties<JDK_HOME>\jre\lib\comm.jar这里应该是JRE的路径,而不是JDK的路径。相信你更换一下就OK了。反正我的和你现象一样,现在可以通讯上了。
复制到JDK还是JRE目录,这主要看你使用了那个目录下的java.exe,即那个目录的bin路径在PATH中优先被找到。。。。更好的方式,是直接放在工作路径下。
第一阶段:在Win32平台下编码并测试;
第二阶段:在Linux平台下部署并测试;
目录:
相关资源:(Java Communication包)
Win32串口编程前期准备
Win32短信Modem的测试步骤和AT指令:
Linux串口编程前期准备
列出系统所有串口、并口,来找到短信Modem所使用的串口名字
测试串口速率
Win32/Linux下串口编程的差异
Win32/Linux下串口编程(屏蔽平台差异)
Win32/Linux下加载Java串口驱动
-------------------------
相关资源:(Java Communication包)
comm3.0_u1_linux.zip http://www.sun.com/download/products.xml?id=43208d3d
comm2.0.3.zip (for solaris)
javacomm20-win32.zip http://mdubuc.freeshell.org/Jolt/javacomm20-win32.zip
rxtx-2.1-7-bins.zip http://www.frii.com/~jarvi/rxtx 支持Windows/MacOS/Solaris/Linux四个平台
注:在java中,利用Java Communication包可以操作串口,但官方的包在3.0之后就支持Linux和Solaris平台了,Windows平台的只支持到98年出的2.0版本,不过在XP下还能使用,google一下就可以下载到。当然,也可以用开源的Rxtx实现串口通信
Win32串口编程前期准备
1,unzip javacomm20-win32.zip 到c:\下
2,copy c:\commapi\win32com.dll c:\jdk1.4.2\bin
3,copy c:\commapi\javax.comm.properties c:\jdk1.1.6\lib
4,copy c:\commapi\comm.jar c:\jdk1.1.6\lib
5,set CLASSPATH=c:\jdk1.1.6\lib\comm.jar;%classpath%
6,如果使用USB口的GSM-Modem,则还需要安装,USB-to-Serial的驱动:http://www.jingweigps.com/xzzx.htm (经纬星航)
Win32短信Modem的测试步骤和AT指令:
1,安装USB驱动:(http://www.jingweigps.com/xzzx.htm 经纬星航 USB接口 GSM/GPRS MODEM驱动程序 )
2,打开设备管理器,看看是使用了哪个COM口(显示USB-to-Serial的为COM15),右键选择属性,查看速率为115200
3,使用Windows的超级终端,连接COM15,设定速率115200,其他缺省;
4,以TEXT模式测试发送短信
at at+cmgf=1 at+cmgs=138xxxxxxxx test <ctrl-z>
Linux串口编程前期准备
1,unzip comm3.0_u1_linux.zip 到/home/appusr/JavaComm下
2,cp /home/appusr/JavaComm/libLinuxSerialParallel.so /usr/lib
3,cp /home/appusr/JavaComm/javax.comm.properties /usr/java/j2sdk1.4.2_11/lib
4,cp /home/appusr/JavaComm/comm_linux.jar /usr/java/j2sdk1.4.2_11/lib
5,set CLASSPATH=.:/home/appusr/JavaComm/comm_linux.jar:$CLASSPATH
6,export LANG=zh_CN.GBK #设置中文,否则针对短信进行UCS2编码不正确。
注1:如果没有ROOT权限,可以直接执行如下命令:
export LD_LIBRARY_PATH=/home/appusr/JavaComm:$LD_LIBRARY_PATH export CLASSPATH=.:javacomm_linux.jar:commons-logging-1.0.4.jar:log4j-1.2.8.jar:junit-3.8.1.jar:mpsp_bs2.jar export LANG=zh_CN.GBK
注2:针对javax.comm.properties的搜索顺序如下:
1. Current directory. 2. Each directory in ${java.classpath} (ie. $CLASSPATH or -classpath setting). 3. <JDK>/lib. 4. <JDK>/jre/lib
列出系统所有串口、并口,来找到短信Modem所使用的串口名字
public static void showCommPorts() { CommPortIdentifier portID = null; List port1Vector = new Vector(32); List port2Vector = new Vector(32); Enumeration ports = CommPortIdentifier.getPortIdentifiers(); while (ports.hasMoreElements()) { portID = (CommPortIdentifier)ports.nextElement(); //debug("CommPort : "+portID.getName()+"/type:"+portID.getPortType()); switch(portID.getPortType()) { case CommPortIdentifier.PORT_SERIAL : port1Vector.add(portID.getName()); break; case CommPortIdentifier.PORT_PARALLEL: port2Vector.add(portID.getName()); break; default: break; } } debug("PORT_SERIAL = "+port1Vector); debug("PORT_PARALLEL = "+port2Vector); }
串口编程速率测试:使用AT指令测试串口速率,高速不一定兼容低速(发送命令,返回OK则表示握手成功)
public static void test_rates() throws Exception { int[] rates = {2400, 4800, 9600, 19200, 115200, 230400, 460800, 921600, }; Com2Sms comm = new Com2Sms(); comm.set_comm_rate(9600); comm.comm_open(5000); for(int i=0; i<rates.length; i++) { try { comm.set_comm_rate(rates[i]); comm.at_hello(); log.info("SUCC for rate:"+rates[i]); }catch(Exception e) { log.warn("FAIL for rate:"+rates[i]); } sleepMSec(1000, "set_comm_rate:"+rates[i]); } comm.comm_close(5000); }
Win32/Linux下串口编程的差异
1,加载的驱动名字不同(com.sun.comm.Win32Driver | com.sun.comm.LinuxDriver)
2,Win32需要单独加载动态库:System.loadLibrary("win32com")
3,所使用的串口名字不同(COM15 | /dev/ttyS0),后者可能还需要root权限。
4,速率可能不一样;
Win32/Linux下串口编程(屏蔽平台差异)
Com2Sms comm = new Com2Sms(); //调用initDriver初始化 comm.set_comm("COM16", 115200); //win32 //comm.set_comm("/dev/ttyS0", 9600); //linux
Win32/Linux下加载Java串口驱动
public static boolean initDriver() { boolean b = initDriver_linux(); if (!b) initDriver_win32(); // if (!b) initDriver_solaris(); return b; } protected static boolean initDriver_win32() { try { System.loadLibrary("win32com"); debug("loadLibrary()...win32com.dll"); String driverName = "com.sun.comm.Win32Driver"; CommDriver driver = (CommDriver) Class.forName(driverName).newInstance(); driver.initialize(); debug("initDriver()..."+driverName); return true; } catch (Throwable e) { // e.printStackTrace(); log.warn("initDriver() "+e); return false; } } protected static boolean initDriver_linux() { try { String driverName = "com.sun.comm.LinuxDriver"; CommDriver driver = (CommDriver) Class.forName(driverName).newInstance(); driver.initialize(); debug("initDriver()..."+driverName); return true; } catch (Throwable e) { // e.printStackTrace(); log.warn("initDriver() "+e); return false; } }
下一步工作(20070813):
1,定义独立的服务器,提供http对外接口。(已完成)
2,提供任务队列处理,控制发送流量。(已完成)
3,对WapPush的支持。(已完成)
4,对OMADRM中DRC的支持。(和3一样);
5,测试3和4的超长短信(完成)
6,测试普通文本的超长短信(未完)。
评论
8 楼
小冰糕
2012-01-15
kenter1643 写道
前几天我也在弄串口通讯,也是得到空的。今天重新配置,发现配置文件没有配置正确。
说明文件中的说明是错误的,
<JDK_HOME>\jre\bin\win32com.dll
<JDK_HOME>\jre\lib\javax.comm.properties
<JDK_HOME>\jre\lib\comm.jar
这里应该是JRE的路径,而不是JDK的路径。相信你更换一下就OK了。反正我的和你现象一样,现在可以通讯上了。
说明文件中的说明是错误的,
<JDK_HOME>\jre\bin\win32com.dll
<JDK_HOME>\jre\lib\javax.comm.properties
<JDK_HOME>\jre\lib\comm.jar
这里应该是JRE的路径,而不是JDK的路径。相信你更换一下就OK了。反正我的和你现象一样,现在可以通讯上了。
我怎么配置都是串口为空异常。。。笔记本上没有串口也就算了,在台式机上也是这样。。。这肿么搞呀。。
7 楼
salever
2011-09-13
不错,
6 楼
sosyi
2010-08-27
5 楼
zeroliu
2009-03-11
kenter1643 写道
前几天我也在弄串口通讯,也是得到空的。今天重新配置,发现配置文件没有配置正确。说明文件中的说明是错误的,<JDK_HOME>\jre\bin\win32com.dll<JDK_HOME>\jre\lib\javax.comm.properties<JDK_HOME>\jre\lib\comm.jar这里应该是JRE的路径,而不是JDK的路径。相信你更换一下就OK了。反正我的和你现象一样,现在可以通讯上了。
复制到JDK还是JRE目录,这主要看你使用了那个目录下的java.exe,即那个目录的bin路径在PATH中优先被找到。。。。更好的方式,是直接放在工作路径下。
4 楼
kenter1643
2009-03-05
前几天我也在弄串口通讯,也是得到空的。今天重新配置,发现配置文件没有配置正确。
说明文件中的说明是错误的,
<JDK_HOME>\jre\bin\win32com.dll
<JDK_HOME>\jre\lib\javax.comm.properties
<JDK_HOME>\jre\lib\comm.jar
这里应该是JRE的路径,而不是JDK的路径。相信你更换一下就OK了。反正我的和你现象一样,现在可以通讯上了。
说明文件中的说明是错误的,
<JDK_HOME>\jre\bin\win32com.dll
<JDK_HOME>\jre\lib\javax.comm.properties
<JDK_HOME>\jre\lib\comm.jar
这里应该是JRE的路径,而不是JDK的路径。相信你更换一下就OK了。反正我的和你现象一样,现在可以通讯上了。
3 楼
zhangyuzsy
2008-07-17
引用
2 楼
lwwjsdf
2008-01-02
刚完成公司要求的短信模块二次开发,不过能够这么详细的写出开发过程我倒是没有想过,呵呵,收藏了先。
1 楼
dahaizisheng
2007-08-27
鼓励,期待啊
发表评论
-
反编译android应用,降低权限反吸费和隐藏广告,重新打包和签名【原创】
2011-07-27 13:20 8728功能:反编译apk降低权限及重新签名 场景:很多软件,申请了一 ... -
修复mina2客户端IoSession.close()在jdk1.5下关闭不彻底问题
2009-11-23 15:51 6134原帖:http://hi.baidu.com/zeorliu/ ... -
日志API改进:用commons-log还是slf4j?这是一个问题!
2009-02-11 10:23 3687用commons-log还是slf4j?这是一个问题! 看jd ... -
在Web中动态生成验证码:Servlet和Rest模式
2008-09-24 10:23 3578【虎.无名】登录处理常用到一个生成随机校验码图片的处理。下面是 ... -
【虎.无名】自定义Java的REST行为分发器
2008-09-10 09:10 3026【虎.无名】在Restlet和Rails中,资源所支持的Act ... -
算法分析:货郎担问题求解分析
2008-07-22 10:28 4656【虎.无名】看到一个帖子 【迷题:走遍全国各省会的最短路线问题 ... -
答复: 谁能告诉我,什么是企业“级”应用?
2008-04-24 16:16 2245http://www.iteye.com/topic/1078 ... -
答greatolee:OMADRM的agent并不能获取明文内容
2008-04-23 17:00 2002greatolee,您好! OMADRM有2个版本,你说的是O ... -
答g_ktcy短信格式:文本,超长文本,WapPush、OMA-DRM权限、Wap书签、GPRS配置
2008-04-17 15:57 3176g_ktcy,您好! 短信有很多种类:文本,超长文本,WapP ... -
Linux下通过ftp命令实现断点续传(reget)
2008-02-19 14:43 13711同事在Linux通过FTP获取一个1.3G的大文件,传了一个上 ... -
Symbian OS C++学习笔记2异常退出
2007-03-21 09:40 3235Ch2. 异常退出(Leave) -------------- ... -
OMADRM2学习笔记:DCF-v2结构解析
2007-03-21 09:39 2847【虎.无名】由于需要支持流媒体格式,因而OMA-DRM-DCF ... -
Symbian OS C++学习笔记1命名约定
2007-03-09 15:52 2364http://zeroliu.blogdriver.com/z ... -
OMADRM2学习笔记DCF-v2规范定义
2007-03-09 15:51 3654http://zeroliu.blogdriver.com/z ... -
用Java动态代理实现委托模式
2006-10-23 17:35 5413委托模式是软件设计模式中的一项基本技巧。在委托模式中,有两个对 ... -
Java开发八荣八耻 zt
2006-10-20 09:54 1728以动手实践为荣,以只看不练为耻。 以打印日志为荣,以出错不报为 ... -
查看磁盘剩余空间:Java代码改进
2006-10-09 10:09 8446原来发布在Blog上的:http://zeroliu.blog ...
相关推荐
读书笔记:Java 并发编程之美
读书笔记:Java并发编程之美
读书笔记:java 函数式编程学习
读书笔记:java编程思想的例程
读书笔记:java函数式编程简介
读书笔记:java函数式编程实践
读书笔记:Java 8函数式编程
读书笔记:java 8 函数式 编程
读书笔记:java 8 函数式编程
读书笔记:Java网络编程学习
Java学习笔记:JSONObject与JSONArray的使用.docx
Java学习笔记:JSONObject与JSONArray的使用.pdf
读书笔记:JAVA网络编程精解
读书笔记:java网络编程实战
读书笔记:java网络编程实例
读书笔记:java网络编程示例
读书笔记:java网络编程练习
读书笔记:Java网络编程Demo
读书笔记:java网络编程实验
读书笔记:Java 网络编程 IO