在写一个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) {}
        }
}

}

解决方案 »

  1.   

    晕  刚发完贴,又奋起写了一会代码,问题解决了 :(  :)!
    原因是我一次把所有命令都发过去了,我现在把所有命令放到数组里,延时顺序发送,就一切正常了。
    现在想知道能否往指定端口发送?我想使用j2me的push机制激活程序。
    帮我回答了第二个,一样加分!
      

  2.   

    J2ME的问题着么发到这里来了..
      

  3.   

    跟j2me没关系,这个只是它的用途。 我问的是javax.comm扩展包的问题,就是如何串口控制信息发往手机指定端口。发往指定端口,我已经用第三方的SMSLib解决了。不过还是想知道javax.comm能否实现发送信息到特定端口。
      

  4.   

    下面有介绍,还有需要的动态库及类库下载
    http://www.programmerstudy.com/programme/java/20084/97.html