一.使用sun公司的comm.jar
1.配置(下载comm.jar包http://code.google.com/p/smslib/downloads/detail?name=javacomm20-win32.zip&can=2&q=)
(1).将包下的javax.comm.properties放到jdk home/jre/lib下
(2).将包下的win32com.dll放到jdk home/jre/bin下(也可以放到windows下的system32下)
(3).将comm.jar放到jdk home/jre/lib/ext下
2.java代码
package comm;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.TooManyListenersException;
import javax.comm.CommDriver;
import javax.comm.CommPortIdentifier;
import javax.comm.PortInUseException;
import javax.comm.SerialPort;
import javax.comm.SerialPortEvent;
import javax.comm.SerialPortEventListener;
import javax.comm.UnsupportedCommOperationException;
public class SimpleWrite {
public static void main(String[] args) {
// System.loadLibrary("win32com");
CommDriver driver = null;
String driverName = "com.sun.comm.Win32Driver";
// SerialPort sPort = (SerialPort) driver.getCommPort("COM4",
// CommPortIdentifier.PORT_SERIAL);
Enumeration<CommPortIdentifier> enumeration = CommPortIdentifier
.getPortIdentifiers();
while (enumeration.hasMoreElements()) {
CommPortIdentifier portId = enumeration.nextElement();
System.out.println(portId.getName() + "============");
if (portId.getName().equals("COM1")) {
try {
System.out.println("jjj");
final SerialPort sp = (SerialPort) portId.open(
"SimpleWrite", 1000);
sp.setSerialPortParams(2400, SerialPort.DATABITS_8,
SerialPort.STOPBITS_2, SerialPort.PARITY_NONE);
final InputStream is = sp.getInputStream();
final OutputStream os = sp.getOutputStream();
os.write(100);
os.flush();
os.close();
//Set notifyOnDataAvailable to true to allow event driven input.
sp.notifyOnDataAvailable(true);
// Set notifyOnBreakInterrup to allow event driven break
// handling.
sp.notifyOnBreakInterrupt(true);
// Set receive timeout to allow breaking out of polling loop
// during input handling.
sp.enableReceiveTimeout(30);
final StringBuffer linkWgt = new StringBuffer();// 存放获取的数据
sp.addEventListener(new SerialPortEventListener() {
@Override
public void serialEvent(SerialPortEvent e) {
int newData = 0;
// Determine type of event.
switch (e.getEventType()) {
// Read data until -1 is returned. If \r is received
// substitute
// \n for correct newline handling.
case SerialPortEvent.DATA_AVAILABLE:
while (newData != -1) {
try {
newData = is.read();
if (newData == -1) {
break;
}
if ('\r' == (char) newData) {
} else {
linkWgt.append((char) newData);
}
} catch (IOException ex) {
System.err.println(ex);
return;
}
}
// Append received data to messageAreaIn.
try {
System.out
.println("linkWgt ---------||||| "
+ Double.valueOf(linkWgt
.toString()));
} catch (Exception ew) {
ew.printStackTrace();
} finally {
try {
// 用完了,记得关闭端口。
is.close();
sp.close();
} catch (Exception c) {
c.printStackTrace();
}
}
break;
// If break event append BREAK RECEIVED message.
case SerialPortEvent.BI:
System.out
.println("\n--- BREAK RECEIVED ---\n");
}
}
});
} catch (PortInUseException e) {
e.printStackTrace();
} catch (UnsupportedCommOperationException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (TooManyListenersException e) {
e.printStackTrace();
}
}
}
}
}
二.用rxtx.jar代替comm.jar
# copy rxtxSerial.dll into your c:\program files\java\jre-version\bin dir
# copy RXTXcomm.jar into your c:\program files\java\jre-version\lib\ext dir
# change all references from 'javax.comm' to 'gnu.io'
三.然后就可以测试了,推荐使用Virtual Serial Port Driver 6.9 by Eltima Software
它可以虚拟出两个相连的串口,你可以通过包里的一个小例子:SimpleWrite,SimpleRead
来测试
四.检查下你的modem支不支持来电显示:
1.打开超级终端,随便输入一个连接名称,例如TEST。(也可以用其它终端件, 如Bitware)
2.按确定后,下个窗口中,看到你的MODEM,不要输入电话号码。再下一步。
3.在这个窗口中按取消。
4.这样一个可以输入的空白窗口就有了。
输入:ATE1回车
如果出现OK,说明MODEM支持AT指令,不然,其他也不用试了。
然后输入下面的命令,只要一条反应有OK,就说明MODEM本身芯片支持来电显示。
AT#CID=1 比较常用
AT%CCID=1
AT+VCID=1 比较常用
AT#CC1
AT*ID1
5.如果有一条有OK,接下来,你打入电话,(事先接好电话线到MODEM)。
如果你的MODEM真的支持来电显示,则会出现如下类似的内容:
RING
DATE = 1010
TIME = 1600
NMBR = **********(你拨入的主叫号码)
RING
如果你的MODEM不支持来电显示,则此时可能会显示:
RING
RING
RING
还有的MODEM,什么也不显示,那就更不可能支持来电显示了。
http://www.ititgo.com.cn/goods-144.html
分享到:
相关推荐
java串口通讯及串口调试助手
Java调用串口设备之ModbusRTU协议
Java串口,本实例大致工作流程是:将以下的所有java类都放在一个包下面,run as ---java application ,打开的是一个图形化界面,最上面的是一个输入文本框(也就是你要发射的指令输入框),下面是一个接收的返回...
java,串口通信,PC-PC串口,实现串口通信,PC-PC串口
利用GUI图形化界面实现JAVA串口通信
java 串口通信 http://blog.hitangjun.com
Java串口编程 - 介绍java串口实现方法
java串口通讯demo源码,内有注解。可实现通过javaWeb页面控制串口,调用串口数据,发送串口指令等操作。可同时监听多个串口,并同时向多个串口发送和接收消息。内含已经写好的串口监听类,定时器,以及串口数据转换...
JAVA串口程序源码,可以通过串口进行数据的发送与接收
JAVA串口通讯 modbus
java源码 JAVA串口通信源码 .
java串口通信简单例子,方便串口上位机的开发,作为引导作用
java串口通信文档 示例
Java串口通信编程
1.1 常见的Java串口包... 1 1.2 串口包的安装(Windows下)... 1 2 串口API概览... 2 2.1 javax.comm.CommPort2 2.2 javax.comm.CommPortIdentifier3 2.3 javax.comm.SerialPort3 2.4 串口API实例... 3 2.4.1...
Java串口通信攻击技术Java串口通信攻击技术Java串口通信攻击技术Java串口通信攻击技术Java串口通信攻击技术
解决java串口操作中发送数据中只要包含0x0A,操作系统自动在0x0A前添加0x0D的的问题例子程序。
Linux系统下用Java开发串口通信程序的类库,从Arduino的IDE中扒出来的,比官方的更加好用,Bug少,支持Arduino设备与Linux之间的串口通信;Linux系统下用Java开发串口通信程序的类库,从Arduino的IDE中扒出来的,比...
树莓派java 串口开发 调用示例,内含3个串口jar包,和一个 高频读写器JW.UHF-1.0.jar (树莓派上的jdk请安装arm版,我安装的是 jdk-8u191-linux-arm32-vfp-hflt.tar.gz)
本代码用Java编写,串口通信,把收到的串口数据解析用图像实时显示在java界面上