{"id":92,"date":"2021-10-24T18:31:09","date_gmt":"2021-10-24T10:31:09","guid":{"rendered":"https:\/\/www.zhangshuwei.com\/?p=92"},"modified":"2021-10-25T23:43:26","modified_gmt":"2021-10-25T15:43:26","slug":"rxtx%e5%ae%9e%e7%8e%b0java%e4%b8%b2%e5%8f%a3%e7%bc%96%e7%a8%8b","status":"publish","type":"post","link":"https:\/\/www.zhangshuwei.com\/index.php\/2021\/10\/24\/rxtx%e5%ae%9e%e7%8e%b0java%e4%b8%b2%e5%8f%a3%e7%bc%96%e7%a8%8b\/","title":{"rendered":"RXTX\u5b9e\u73b0JAVA\u4e32\u53e3\u7f16\u7a0b"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">\u51c6\u5907\u5de5\u4f5c<\/h2>\n\n\n\n<p><strong>1.1\u4e0b\u8f7d\u6587\u4ef6<\/strong><\/p>\n\n\n\n<p>\u9996\u5148\u4e0b\u8f7dRXTX\u5e93\u5bf9\u5e94\u7684\u8d44\u6e90\u6587\u4ef6\u3002\u4e0b\u8f7d\u5730\u5740 http:\/\/fizzed.com\/oss\/rxtx-for-java \u5927\u5bb6\u6839\u636e\u81ea\u5df1\u7684\u7cfb\u7edf\u4e0b\u8f7d\u5bf9\u5e94\u7684\u6587\u4ef6\u3002<\/p>\n\n\n\n<p>\u4e5f\u53ef\u70b9\u51fb\u4e0b\u9762\u8fde\u63a5\u76f4\u63a5\u4e0b\u8f7d<\/p>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-win-x86.zip\">mfz-rxtx-2.2-20081207-win-x86<\/a><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-win-x86.zip\" class=\"wp-block-file__button\" download>\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-win-x64.zip\">mfz-rxtx-2.2-20081207-win-x64<\/a><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-win-x64.zip\" class=\"wp-block-file__button\" download>\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-linux-i386.zip\">mfz-rxtx-2.2-20081207-linux-i386<\/a><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-linux-i386.zip\" class=\"wp-block-file__button\" download>\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<div class=\"wp-block-file\"><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-linux-x86_64.zip\">mfz-rxtx-2.2-20081207-linux-x86_64<\/a><a href=\"https:\/\/www.zhangshuwei.com\/wp-content\/uploads\/2021\/10\/mfz-rxtx-2.2-20081207-linux-x86_64.zip\" class=\"wp-block-file__button\" download>\u4e0b\u8f7d<\/a><\/div>\n\n\n\n<p><strong>1.2\u62f7\u8d1d\u52a8\u6001\u5e93<\/strong><\/p>\n\n\n\n<p>RXJX\u7684\u5b9e\u73b0\u8fd8\u9700\u8981\u4f9d\u8d56\u51e0\u4e2a\u52a8\u6001\u5e93\uff0c\u6240\u4ee5\u6211\u4eec\u8981\u5148\u628a\u52a8\u6001\u5e93\u653e\u5230\u5bf9\u5e94\u7684jdk\u76ee\u5f55\u4e0b\u9762\u53bb\u3002window\u548clinux\u62f7\u8d1d\u7684\u6587\u4ef6\u4e0d\u540c\uff0c\u5982\u4e0b\u6240\u793a\uff1a<\/p>\n\n\n\n<p>window\u5e73\u53f0:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u62f7\u8d1d rxtxSerial.dll \u2014&gt; &lt;JAVA_HOME&gt;\\jre\\bin<\/li><li>\u62f7\u8d1d rxtxParallel.dll \u2014&gt; &lt;JAVA_HOME&gt;\\jre\\bin<\/li><\/ul>\n\n\n\n<p>linux\u5e73\u53f0:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u62f7\u8d1d librxtxSerial.so \u2014> &lt;JAVA_HOME>\/jre\/lib\/i386\/<\/li><li>\u62f7\u8d1d librxtxParallel.so \u2014> &lt;JAVA_HOME>\/jre\/lib\/i386\/<\/li><\/ul>\n\n\n\n<p>1.3\u5f15\u5165\u52a8\u6001\u5e93<\/p>\n\n\n\n<p>RXTXcomm.jar\u6587\u4ef6\u5f15\u5165\u5230\u5de5\u7a0b\u4ee3\u7801\u91cc\u9762\u53bb\u3002<\/p>\n\n\n\n<p>\u6bd4\u5982\u6211\u4eec\u628aRXTXcomm.jar\u6587\u4ef6\u653e\u5230\u5de5\u7a0b\u76ee\u5f55\u4e0bresource\/jar\u76ee\u5f55\u4e0b\u9762\u53bb\u3002\u7136\u540e\u5728pom.xml\u4e2d\u628aRXTXcomm.jar\u5f15\u5165\u8fdb\u6765\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"xml\" class=\"language-xml line-numbers\">&lt;dependency>\r\n    &lt;groupId>gnu.io&lt;\/groupId>\r\n    &lt;artifactId>com-lib&lt;\/artifactId>\r\n    &lt;version>2.2&lt;\/version>\r\n    &lt;scope>system&lt;\/scope>\r\n    &lt;systemPath>${project.basedir}\/src\/main\/resources\/jar\/RXTXcomm.jar&lt;\/systemPath>\r\n&lt;\/dependency>\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b9e\u73b0\u4ee3\u7801<\/h2>\n\n\n\n<p>\u524d\u9762\u51c6\u5907\u5de5\u4f5c\u505a\u597d\u4e86\uff0c\u63a5\u4e0b\u6765\u5c31\u662f\u4ee3\u7801\u5b9e\u73b0\uff0c\u597d\u591a\u4ee3\u7801\u54b1\u4eec\u4e5f\u662f\u4ece\u7f51\u4e0acopy\u8fc7\u6765\u7684\uff0c\u8fd9\u91cc\u6211\u5c31\u76f4\u63a5\u8d34\u4ee3\u7801\u4e86\u3002<\/p>\n\n\n\n<p><strong>2.1\u4e32\u53e3\u53c2\u6570\u7684\u7b80\u5355\u5c01\u88c5<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java line-numbers\">package com.pilot.ioserver.basic.pbl.port.serialPort;\r\n\r\nimport gnu.io.SerialPort;\r\n\r\n\/**\r\n * @name: SerialPortParameter\r\n * @author: tuacy.\r\n * @date: 2019\/6\/26.\r\n * @version: 1.0\r\n * @Description: \u4e32\u53e3\u53c2\u6570\r\n *\/\r\npublic final class SerialPortParameter {\r\n\r\n    \/**\r\n     * \u4e32\u53e3\u540d\u79f0(COM0\u3001COM1\u3001COM2\u7b49\u7b49)\r\n     *\/\r\n    private String serialPortName;\r\n    \/**\r\n     * \u6ce2\u7279\u7387\r\n     * \u9ed8\u8ba4\uff1a115200\r\n     *\/\r\n    private int baudRate;\r\n    \/**\r\n     * \u6570\u636e\u4f4d \u9ed8\u8ba48\u4f4d\r\n     * \u53ef\u4ee5\u8bbe\u7f6e\u7684\u503c\uff1aSerialPort.DATABITS_5\u3001SerialPort.DATABITS_6\u3001SerialPort.DATABITS_7\u3001SerialPort.DATABITS_8\r\n     * \u9ed8\u8ba4\uff1aSerialPort.DATABITS_8\r\n     *\/\r\n    private int dataBits;\r\n    \/**\r\n     * \u505c\u6b62\u4f4d\r\n     * \u53ef\u4ee5\u8bbe\u7f6e\u7684\u503c\uff1aSerialPort.STOPBITS_1\u3001SerialPort.STOPBITS_2\u3001SerialPort.STOPBITS_1_5\r\n     * \u9ed8\u8ba4\uff1aSerialPort.STOPBITS_1\r\n     *\/\r\n    private int stopBits;\r\n    \/**\r\n     * \u6821\u9a8c\u4f4d\r\n     * \u53ef\u4ee5\u8bbe\u7f6e\u7684\u503c\uff1aSerialPort.PARITY_NONE\u3001SerialPort.PARITY_ODD\u3001SerialPort.PARITY_EVEN\u3001SerialPort.PARITY_MARK\u3001SerialPort.PARITY_SPACE\r\n     * \u9ed8\u8ba4\uff1aSerialPort.PARITY_NONE\r\n     *\/\r\n    private int parity;\r\n\r\n    public SerialPortParameter(String serialPortName) {\r\n        this.serialPortName = serialPortName;\r\n        this.baudRate = 115200;\r\n        this.dataBits = SerialPort.DATABITS_8;\r\n        this.stopBits = SerialPort.STOPBITS_1;\r\n        this.parity = SerialPort.PARITY_NONE;\r\n    }\r\n\r\n    public SerialPortParameter(String serialPortName, int baudRate) {\r\n        this.serialPortName = serialPortName;\r\n        this.baudRate = baudRate;\r\n        this.dataBits = SerialPort.DATABITS_8;\r\n        this.stopBits = SerialPort.STOPBITS_1;\r\n        this.parity = SerialPort.PARITY_NONE;\r\n    }\r\n\r\n    public String getSerialPortName() {\r\n        return serialPortName;\r\n    }\r\n\r\n    public void setSerialPortName(String serialPortName) {\r\n        this.serialPortName = serialPortName;\r\n    }\r\n\r\n    public int getBaudRate() {\r\n        return baudRate;\r\n    }\r\n\r\n    public void setBaudRate(int baudRate) {\r\n        this.baudRate = baudRate;\r\n    }\r\n\r\n    public int getDataBits() {\r\n        return dataBits;\r\n    }\r\n\r\n    public void setDataBits(int dataBits) {\r\n        this.dataBits = dataBits;\r\n    }\r\n\r\n    public int getStopBits() {\r\n        return stopBits;\r\n    }\r\n\r\n    public void setStopBits(int stopBits) {\r\n        this.stopBits = stopBits;\r\n    }\r\n\r\n    public int getParity() {\r\n        return parity;\r\n    }\r\n\r\n    public void setParity(int parity) {\r\n        this.parity = parity;\r\n    }\r\n}\r\n<\/code><\/pre>\n\n\n\n<p><strong>2.2\u4e32\u53e3\u5de5\u5177\u7c7b\u7684\u7b80\u5355\u5c01\u88c5<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java line-numbers\">package com.pilot.ioserver.basic.pbl.port.serialPort;\r\n\r\nimport gnu.io.*;\r\n\r\nimport java.io.IOException;\r\nimport java.io.InputStream;\r\nimport java.io.OutputStream;\r\nimport java.util.ArrayList;\r\nimport java.util.Enumeration;\r\nimport java.util.List;\r\nimport java.util.TooManyListenersException;\r\n\r\n\/**\r\n * @name: SerialPortUtil\r\n * @author: tuacy.\r\n * @date: 2019\/6\/26.\r\n * @version: 1.0\r\n * @Description: \u4e32\u53e3\u5de5\u5177\u7c7b\r\n *\/\r\npublic class SerialPortUtil {\r\n\r\n    \/**\r\n     * \u83b7\u5f97\u7cfb\u7edf\u53ef\u7528\u7684\u7aef\u53e3\u540d\u79f0\u5217\u8868(COM0\u3001COM1\u3001COM2\u7b49\u7b49)\r\n     *\r\n     * @return List&lt;String>\u53ef\u7528\u7aef\u53e3\u540d\u79f0\u5217\u8868\r\n     *\/\r\n\r\n    @SuppressWarnings(\"unchecked\")\r\n    public static List&lt;String> getSerialPortList() {\r\n        List&lt;String> systemPorts = new ArrayList&lt;>();\r\n        \/\/\u83b7\u5f97\u7cfb\u7edf\u53ef\u7528\u7684\u7aef\u53e3\r\n        Enumeration&lt;CommPortIdentifier> portList = CommPortIdentifier.getPortIdentifiers();\r\n        while (portList.hasMoreElements()) {\r\n            String portName = portList.nextElement().getName();\/\/\u83b7\u5f97\u7aef\u53e3\u7684\u540d\u5b57\r\n            systemPorts.add(portName);\r\n        }\r\n        return systemPorts;\r\n    }\r\n\r\n    \/**\r\n     * \u6253\u5f00\u4e32\u53e3\r\n     *\r\n     * @param serialPortName \u4e32\u53e3\u540d\u79f0\r\n     * @return SerialPort \u4e32\u53e3\u5bf9\u8c61\r\n     * @throws NoSuchPortException               \u5bf9\u5e94\u4e32\u53e3\u4e0d\u5b58\u5728\r\n     * @throws PortInUseException                \u4e32\u53e3\u5728\u4f7f\u7528\u4e2d\r\n     * @throws UnsupportedCommOperationException \u4e0d\u652f\u6301\u64cd\u4f5c\u64cd\u4f5c\r\n     *\/\r\n    public static SerialPort openSerialPort(String serialPortName)\r\n            throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException {\r\n        SerialPortParameter parameter = new SerialPortParameter(serialPortName);\r\n        return openSerialPort(parameter);\r\n    }\r\n\r\n    \/**\r\n     * \u6253\u5f00\u4e32\u53e3\r\n     *\r\n     * @param serialPortName \u4e32\u53e3\u540d\u79f0\r\n     * @param baudRate       \u6ce2\u7279\u7387\r\n     * @return SerialPort \u4e32\u53e3\u5bf9\u8c61\r\n     * @throws NoSuchPortException               \u5bf9\u5e94\u4e32\u53e3\u4e0d\u5b58\u5728\r\n     * @throws PortInUseException                \u4e32\u53e3\u5728\u4f7f\u7528\u4e2d\r\n     * @throws UnsupportedCommOperationException \u4e0d\u652f\u6301\u64cd\u4f5c\u64cd\u4f5c\r\n     *\/\r\n    public static SerialPort openSerialPort(String serialPortName, int baudRate)\r\n            throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException {\r\n        SerialPortParameter parameter = new SerialPortParameter(serialPortName, baudRate);\r\n        return openSerialPort(parameter);\r\n    }\r\n\r\n    \/**\r\n     * \u6253\u5f00\u4e32\u53e3\r\n     *\r\n     * @param serialPortName \u4e32\u53e3\u540d\u79f0\r\n     * @param baudRate       \u6ce2\u7279\u7387\r\n     * @param timeout        \u4e32\u53e3\u6253\u5f00\u8d85\u65f6\u65f6\u95f4\r\n     * @return SerialPort \u4e32\u53e3\u5bf9\u8c61\r\n     * @throws NoSuchPortException               \u5bf9\u5e94\u4e32\u53e3\u4e0d\u5b58\u5728\r\n     * @throws PortInUseException                \u4e32\u53e3\u5728\u4f7f\u7528\u4e2d\r\n     * @throws UnsupportedCommOperationException \u4e0d\u652f\u6301\u64cd\u4f5c\u64cd\u4f5c\r\n     *\/\r\n    public static SerialPort openSerialPort(String serialPortName, int baudRate, int timeout)\r\n            throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException {\r\n        SerialPortParameter parameter = new SerialPortParameter(serialPortName, baudRate);\r\n        return openSerialPort(parameter, timeout);\r\n    }\r\n\r\n    \/**\r\n     * \u6253\u5f00\u4e32\u53e3\r\n     *\r\n     * @param parameter \u4e32\u53e3\u53c2\u6570\r\n     * @return SerialPort \u4e32\u53e3\u5bf9\u8c61\r\n     * @throws NoSuchPortException               \u5bf9\u5e94\u4e32\u53e3\u4e0d\u5b58\u5728\r\n     * @throws PortInUseException                \u4e32\u53e3\u5728\u4f7f\u7528\u4e2d\r\n     * @throws UnsupportedCommOperationException \u4e0d\u652f\u6301\u64cd\u4f5c\u64cd\u4f5c\r\n     *\/\r\n    public static SerialPort openSerialPort(SerialPortParameter parameter)\r\n            throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException {\r\n        return openSerialPort(parameter, 2000);\r\n    }\r\n\r\n    \/**\r\n     * \u6253\u5f00\u4e32\u53e3\r\n     *\r\n     * @param parameter \u4e32\u53e3\u53c2\u6570\r\n     * @param timeout   \u4e32\u53e3\u6253\u5f00\u8d85\u65f6\u65f6\u95f4\r\n     * @return SerialPort\u4e32\u53e3\u5bf9\u8c61\r\n     * @throws NoSuchPortException               \u5bf9\u5e94\u4e32\u53e3\u4e0d\u5b58\u5728\r\n     * @throws PortInUseException                \u4e32\u53e3\u5728\u4f7f\u7528\u4e2d\r\n     * @throws UnsupportedCommOperationException \u4e0d\u652f\u6301\u64cd\u4f5c\u64cd\u4f5c\r\n     *\/\r\n    public static SerialPort openSerialPort(SerialPortParameter parameter, int timeout)\r\n            throws NoSuchPortException, PortInUseException, UnsupportedCommOperationException {\r\n        \/\/\u901a\u8fc7\u7aef\u53e3\u540d\u79f0\u5f97\u5230\u7aef\u53e3\r\n        CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(parameter.getSerialPortName());\r\n        \/\/\u6253\u5f00\u7aef\u53e3\uff0c\uff08\u81ea\u5b9a\u4e49\u540d\u5b57\uff0c\u6253\u5f00\u8d85\u65f6\u65f6\u95f4\uff09\r\n        CommPort commPort = portIdentifier.open(parameter.getSerialPortName(), timeout);\r\n        \/\/\u5224\u65ad\u662f\u4e0d\u662f\u4e32\u53e3\r\n        if (commPort instanceof SerialPort) {\r\n            SerialPort serialPort = (SerialPort) commPort;\r\n            \/\/\u8bbe\u7f6e\u4e32\u53e3\u53c2\u6570\uff08\u6ce2\u7279\u7387\uff0c\u6570\u636e\u4f4d8\uff0c\u505c\u6b62\u4f4d1\uff0c\u6821\u9a8c\u4f4d\u65e0\uff09\r\n            serialPort.setSerialPortParams(parameter.getBaudRate(), parameter.getDataBits(), parameter.getStopBits(), parameter.getParity());\r\n            System.out.println(\"\u5f00\u542f\u4e32\u53e3\u6210\u529f\uff0c\u4e32\u53e3\u540d\u79f0\uff1a\" + parameter.getSerialPortName());\r\n            return serialPort;\r\n        } else {\r\n            \/\/\u662f\u5176\u4ed6\u7c7b\u578b\u7684\u7aef\u53e3\r\n            throw new NoSuchPortException();\r\n        }\r\n    }\r\n\r\n\r\n    \/**\r\n     * \u5173\u95ed\u4e32\u53e3\r\n     *\r\n     * @param serialPort \u8981\u5173\u95ed\u7684\u4e32\u53e3\u5bf9\u8c61\r\n     *\/\r\n    public static void closeSerialPort(SerialPort serialPort) {\r\n        if (serialPort != null) {\r\n            serialPort.close();\r\n            System.out.println(\"\u5173\u95ed\u4e86\u4e32\u53e3\uff1a\" + serialPort.getName());\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u5411\u4e32\u53e3\u53d1\u9001\u6570\u636e\r\n     *\r\n     * @param serialPort \u4e32\u53e3\u5bf9\u8c61\r\n     * @param data       \u53d1\u9001\u7684\u6570\u636e\r\n     *\/\r\n    public static void sendData(SerialPort serialPort, byte[] data) {\r\n        OutputStream os = null;\r\n        try {\r\n            \/\/\u83b7\u5f97\u4e32\u53e3\u7684\u8f93\u51fa\u6d41\r\n            os = serialPort.getOutputStream();\r\n            os.write(data);\r\n            os.flush();\r\n        } catch (IOException e) {\r\n            e.printStackTrace();\r\n        } finally {\r\n            try {\r\n                if (os != null) {\r\n                    os.close();\r\n                }\r\n            } catch (IOException e) {\r\n                e.printStackTrace();\r\n            }\r\n        }\r\n    }\r\n\r\n    \/**\r\n     * \u4ece\u4e32\u53e3\u8bfb\u53d6\u6570\u636e\r\n     *\r\n     * @param serialPort \u8981\u8bfb\u53d6\u7684\u4e32\u53e3\r\n     * @return \u8bfb\u53d6\u7684\u6570\u636e\r\n     *\/\r\n    public static byte[] readData(SerialPort serialPort) {\r\n        InputStream is = null;\r\n        byte[] bytes = null;\r\n        try {\r\n            \/\/\u83b7\u5f97\u4e32\u53e3\u7684\u8f93\u5165\u6d41\r\n            is = serialPort.getInputStream();\r\n            \/\/\u83b7\u5f97\u6570\u636e\u957f\u5ea6\r\n            int bufflenth = is.available();\r\n            while (bufflenth != 0) {\r\n                \/\/\u521d\u59cb\u5316byte\u6570\u7ec4\r\n                bytes = new byte[bufflenth];\r\n                is.read(bytes);\r\n                bufflenth = is.available();\r\n            }\r\n        } catch (IOException e) {\r\n            e.printStackTrace();\r\n        } finally {\r\n            try {\r\n                if (is != null) {\r\n                    is.close();\r\n                }\r\n            } catch (IOException e) {\r\n                e.printStackTrace();\r\n            }\r\n        }\r\n        return bytes;\r\n    }\r\n\r\n    \/**\r\n     * \u7ed9\u4e32\u53e3\u8bbe\u7f6e\u76d1\u542c\r\n     *\r\n     * @param serialPort serialPort \u8981\u8bfb\u53d6\u7684\u4e32\u53e3\r\n     * @param listener   SerialPortEventListener\u76d1\u542c\u5bf9\u8c61\r\n     * @throws TooManyListenersException \u76d1\u542c\u5bf9\u8c61\u592a\u591a\r\n     *\/\r\n    public static void setListenerToSerialPort(SerialPort serialPort, SerialPortEventListener listener) throws TooManyListenersException {\r\n        \/\/\u7ed9\u4e32\u53e3\u6dfb\u52a0\u4e8b\u4ef6\u76d1\u542c\r\n        serialPort.addEventListener(listener);\r\n        \/\/\u4e32\u53e3\u6709\u6570\u636e\u76d1\u542c\r\n        serialPort.notifyOnDataAvailable(true);\r\n        \/\/\u4e2d\u65ad\u4e8b\u4ef6\u76d1\u542c\r\n        serialPort.notifyOnBreakInterrupt(true);\r\n    }\r\n\r\n\r\n}\r\n<\/code><\/pre>\n\n\n\n<p><strong>2.3\u6d4b\u8bd5<\/strong><\/p>\n\n\n\n<p>\u5355\u5143\u6d4b\u8bd5\u7c7b<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"java\" class=\"language-java line-numbers\">package com.pilot.ioserver.basic.pbl.port.serialPort;\n\nimport gnu.io.*;\nimport org.junit.Test;\n\nimport java.util.List;\nimport java.util.TooManyListenersException;\n\n\/**\n * @name: SerialPortUtilTest\n * @author: tuacy.\n * @date: 2019\/6\/26.\n * @version: 1.0\n * @Description: \u4e32\u53e3\u6d4b\u8bd5\u4ee3\u7801\n *\/\npublic class SerialPortUtilTest {\n\n    \/**\n     * \u6d4b\u8bd5\u83b7\u53d6\u4e32\u53e3\u5217\u8868\n     *\/\n    @Test\n    public void getSystemPortList() {\n\n        List&lt;String&gt; portList = SerialPortUtil.getSerialPortList();\n        System.out.println(portList);\n\n    }\n\n    \/**\n     * \u6d4b\u8bd5\u4e32\u53e3\u6253\u5f00\uff0c\u8bfb\uff0c\u5199\u64cd\u4f5c\n     *\/\n    @Test\n    public void serialPortAction() {\n        try {\n            final SerialPort serialPort = SerialPortUtil.openSerialPort(\"COM2\", 115200);\n            \/\/\u542f\u52a8\u4e00\u4e2a\u7ebf\u7a0b\u6bcf2s\u5411\u4e32\u53e3\u53d1\u9001\u6570\u636e\uff0c\u53d1\u90011000\u6b21hello\n            new Thread(() -&gt; {\n                int i = 1;\n                while (i &lt; 1000) {\n                    String s = \"hello\";\n                    byte[] bytes = s.getBytes();\n                    SerialPortUtil.sendData(serialPort, bytes);\/\/\u53d1\u9001\u6570\u636e\n                    i++;\n                    try {\n                        Thread.sleep(2000);\n                    } catch (InterruptedException e) {\n                        e.printStackTrace();\n                    }\n                }\n            }).start();\n            \/\/\u8bbe\u7f6e\u4e32\u53e3\u7684listener\n            SerialPortUtil.setListenerToSerialPort(serialPort, event -&gt; {\n                \/\/\u6570\u636e\u901a\u77e5\n                if (event.getEventType() == SerialPortEvent.DATA_AVAILABLE) {\n                    byte[] bytes = SerialPortUtil.readData(serialPort);\n                    System.out.println(\"\u6536\u5230\u7684\u6570\u636e\u957f\u5ea6\uff1a\" + bytes.length);\n                    System.out.println(\"\u6536\u5230\u7684\u6570\u636e\uff1a\" + new String(bytes));\n                }\n            });\n            try {\n                \/\/ sleep \u4e00\u6bb5\u65f6\u95f4\u4fdd\u8bc1\u7ebf\u7a0b\u53ef\u4ee5\u6267\u884c\u5b8c\n                Thread.sleep(3 * 30 * 1000);\n            } catch (InterruptedException e) {\n                e.printStackTrace();\n            }\n        } catch (NoSuchPortException | PortInUseException | UnsupportedCommOperationException | TooManyListenersException e) {\n            e.printStackTrace();\n        }\n    }\n\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u51c6\u5907\u5de5\u4f5c 1.1\u4e0b\u8f7d\u6587\u4ef6 \u9996\u5148\u4e0b\u8f7dRXTX\u5e93\u5bf9\u5e94\u7684\u8d44\u6e90\u6587\u4ef6\u3002\u4e0b\u8f7d\u5730\u5740 http:\/\/fizzed.com\/os [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[28,31],"class_list":["post-92","post","type-post","status-publish","format-standard","hentry","category-servers","tag-java","tag-31"],"_links":{"self":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts\/92","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/comments?post=92"}],"version-history":[{"count":3,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts\/92\/revisions"}],"predecessor-version":[{"id":99,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/posts\/92\/revisions\/99"}],"wp:attachment":[{"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/media?parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/categories?post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhangshuwei.com\/index.php\/wp-json\/wp\/v2\/tags?post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}