0

我正在开发一个 Windows 应用程序,我正在尝试检索来电显示。

我有一个 56k usb 调制解调器连接到我的笔记本电脑,它连接到电话插座。如何通过 java 代码与调制解调器(在 COM5 连接)进行通信?

import jssc.SerialPort;
import jssc.SerialPortEvent;
import jssc.SerialPortEventListener;
import jssc.SerialPortException;
import jssc.SerialPortList;

public class ComControl {

    static SerialPort serialPort;
    private static Object line;

    public static void main(String[] args) {

          //Method getPortNames() returns an array of strings. Elements of the array is already sorted.
        String[] portNames = SerialPortList.getPortNames();
        for(int i = 0; i < portNames.length; i++){
            System.out.println(portNames[i]);           
        }

        serialPort = new SerialPort("COM5"); 
        try {
            serialPort.openPort();
            serialPort.setParams(9600, 8, 1, 0);

            serialPort.writeString("ATZ\r\n");
            //serialPort.readString();
            System.out.println(serialPort.readString());


        }
        catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }

上面的代码是我目前所拥有的。向串口发送命令后如何检索响应?

提前致谢。

4

1 回答 1

0

如果要检索响应,则需要像这样从端口读取serialPort.readBytes(bufferLength);。根据您的缓冲区长度,您需要多次阅读才能获得整个结果并自己拼凑起来。

以下是来自官方示例页面的示例:

import jssc.SerialPort; import jssc.SerialPortException;

public class Main {
    public static void main(String[] args) {
        SerialPort serialPort = new SerialPort("COM1");
        try {
            serialPort.openPort();//Open serial port
            serialPort.setParams(9600, 8, 1, 0);//Set params.
            byte[] buffer = serialPort.readBytes(10);//Read 10 bytes from serial port
            serialPort.closePort();//Close serial port
        }
        catch (SerialPortException ex) {
            System.out.println(ex);
        }
    }
}

官方的 javadoc 好像下线了,但是你可以在这里找到一些信息:https ://www.java-forums.org/new-java/36167-serial-port-communication-via-jssc.html

请注意 SerialPortEventListener 的示例 3。使用监听器是管理缓冲区的最佳方式。

于 2018-07-09T04:38:54.713 回答