在写一个java commapi的串口通信程序,上网看了很多文章,也看了java comapi的samples代码,看起来确实很简单,写起来也简单,可就是不通。按道理应该是"OK"或"ERROR",可我输进去什么命令,接收串口数据的时候就返回什么。比如我输入"at+cmgs=\"+86139.....\"",返回就是这个。把代码贴出来,请牛人帮我看看。另外我使用的是WinXP+Java commapi+Nokia N70 GSM Modem,不知道是否跟机型有关系,XP自带的超级终端能够使用N70来发送。麻烦各位帮我看一下,谢谢!!!import java.io.*;
import java.util.*;
import javax.comm.*;public class Serial implements SerialPortEventListener{
private static Enumeration portList;
private static CommPortIdentifier portId;
private static String messageString2 = "AT+CMGS=\"+8615921167597\"\r test";
//不知道"ctrl+z"的字符串这样写对不对
private static String messageString3 = (char)Integer.parseInt("1a", 16)+"z";
private static SerialPort serialPort;
private static OutputStream outputStream;
private static InputStream is;
public void doSth() {
portList = CommPortIdentifier.getPortIdentifiers();
//遍历端口
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
//COM4端口 我的计算机上N70被分配的端口号
if (portId.getName().equals("COM4")) {
try {
serialPort = (SerialPort)
portId.open(this.getClass().getName(), 2000);
//添加端口事件监听
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (PortInUseException e) {} catch (TooManyListenersException e) {
}
try {
outputStream = serialPort.getOutputStream();
//初始化串口
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//连接命令
String cmd=messageString2+messageString3;
outputStream.write(cmd.getBytes());
outputStream.flush();
outputStream.close();
} catch (IOException e) {
} catch (UnsupportedCommOperationException e) {
}
}
}
}
} public void serialEvent(SerialPortEvent ev) {
if(ev.getEventType()==SerialPortEvent.DATA_AVAILABLE){
try {
is = serialPort.getInputStream();
byte [] data=new byte [is.available()];
is.read(data);
String str = new String(data);
is.close();
System.out.println("response from serialport:"+str);
} catch (IOException e) {}
}
}
}
import java.util.*;
import javax.comm.*;public class Serial implements SerialPortEventListener{
private static Enumeration portList;
private static CommPortIdentifier portId;
private static String messageString2 = "AT+CMGS=\"+8615921167597\"\r test";
//不知道"ctrl+z"的字符串这样写对不对
private static String messageString3 = (char)Integer.parseInt("1a", 16)+"z";
private static SerialPort serialPort;
private static OutputStream outputStream;
private static InputStream is;
public void doSth() {
portList = CommPortIdentifier.getPortIdentifiers();
//遍历端口
while (portList.hasMoreElements()) {
portId = (CommPortIdentifier) portList.nextElement();
if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {
//COM4端口 我的计算机上N70被分配的端口号
if (portId.getName().equals("COM4")) {
try {
serialPort = (SerialPort)
portId.open(this.getClass().getName(), 2000);
//添加端口事件监听
serialPort.addEventListener(this);
serialPort.notifyOnDataAvailable(true);
} catch (PortInUseException e) {} catch (TooManyListenersException e) {
}
try {
outputStream = serialPort.getOutputStream();
//初始化串口
serialPort.setSerialPortParams(9600,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
SerialPort.PARITY_NONE);
//连接命令
String cmd=messageString2+messageString3;
outputStream.write(cmd.getBytes());
outputStream.flush();
outputStream.close();
} catch (IOException e) {
} catch (UnsupportedCommOperationException e) {
}
}
}
}
} public void serialEvent(SerialPortEvent ev) {
if(ev.getEventType()==SerialPortEvent.DATA_AVAILABLE){
try {
is = serialPort.getInputStream();
byte [] data=new byte [is.available()];
is.read(data);
String str = new String(data);
is.close();
System.out.println("response from serialport:"+str);
} catch (IOException e) {}
}
}
}
原因是我一次把所有命令都发过去了,我现在把所有命令放到数组里,延时顺序发送,就一切正常了。
现在想知道能否往指定端口发送?我想使用j2me的push机制激活程序。
帮我回答了第二个,一样加分!
http://www.programmerstudy.com/programme/java/20084/97.html