Java程序與上位機(jī)通訊是一種重要的應(yīng)用,可以用于實(shí)現(xiàn)設(shè)備控制、數(shù)據(jù)采集、狀態(tài)監(jiān)測(cè)等功能。在通訊過程中,Java程序作為客戶端,上位機(jī)作為服務(wù)器端,通過使用網(wǎng)絡(luò)協(xié)議進(jìn)行數(shù)據(jù)交換。
// Java程序向上位機(jī)發(fā)送數(shù)據(jù) public static void sendData() { try { Socket socket = new Socket("192.168.0.1", 8888); OutputStream outputStream = socket.getOutputStream(); outputStream.write("hello upcomputer".getBytes()); outputStream.flush(); outputStream.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } }
上面的代碼演示了Java程序向上位機(jī)發(fā)送數(shù)據(jù)的過程。首先建立Socket連接,然后通過輸出流向上位機(jī)發(fā)送數(shù)據(jù),最后關(guān)閉連接。在編寫代碼時(shí),需要根據(jù)實(shí)際需求對(duì)IP地址、端口號(hào)等參數(shù)進(jìn)行設(shè)置。
// 上位機(jī)監(jiān)聽Java程序的請(qǐng)求 public static void listen() { try { ServerSocket serverSocket = new ServerSocket(8888); while (true) { Socket socket = serverSocket.accept(); InputStream inputStream = socket.getInputStream(); byte[] bytes = new byte[1024]; int len; while ((len = inputStream.read(bytes)) != -1) { System.out.println(new String(bytes, 0, len)); } inputStream.close(); socket.close(); } } catch (IOException e) { e.printStackTrace(); } }
上面的代碼說明了上位機(jī)如何監(jiān)聽Java程序的請(qǐng)求并處理數(shù)據(jù)。首先創(chuàng)建ServerSocket對(duì)象,并設(shè)置端口號(hào),然后通過accept()方法等待客戶端連接。一旦連接建立成功,就可以通過輸入流讀取客戶端發(fā)送的數(shù)據(jù)。讀取到數(shù)據(jù)后,可以進(jìn)行相應(yīng)的處理,比如打印日志、返回響應(yīng)等。