package com.zksy.lamp.server; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import java.io.*; import java.net.ServerSocket; import java.net.Socket; /** * @author Administrator * @version 1.0 * @project dh-server-micro * @description 指令执行 * @date 2025/2/10 16:25:14 */ @Component public class ExecutionServer { private BufferedReader reader; private BufferedWriter writer; private ServerSocket server; private Socket client; private int serverPort = 15678; @PostConstruct public void init(){ Runnable func0 = this::startServer; Thread thread = new Thread(func0); thread.start(); } @PreDestroy public void closeResource(){ try { if (reader != null) reader.close(); if (writer != null) writer.close(); if (client != null) client.close(); if (server != null) server.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 启动服务器并等待客户端连接 */ public void startServer() { try { System.out.println("本机作为服务端"); System.out.println("本机端口:" + serverPort); server = new ServerSocket(serverPort); System.out.println("等待客户机的连接"); client = server.accept(); System.out.println("连接成功"); String clientAddr = client.getRemoteSocketAddress().toString().substring(1); String[] clientAddrs = clientAddr.split(":"); System.out.println("客户端IP:" + clientAddrs[0] + " 端口:" + clientAddrs[1]); reader = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312")); writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "GB2312")); System.out.println("测试完成!"); } catch (IOException e) { e.printStackTrace(); } } public String ExecutionData(String msg) { try { System.out.println("第1路闭合,发送指令:"+msg); //发送数据 writer.write(msg); writer.flush(); //读数据 msg = reader.readLine(); System.out.println("msg================:"+msg); if (msg != null) { msg = msg.replace("\r\n", "\\r\\n"); } else { System.out.println("接收到的消息为 null,重新建立连接..."); // 关闭当前连接资源 closeResource(); // 重新启动服务器并等待客户端连接 startServer(); // 重新发送指令 writer.write(msg); writer.flush(); msg = reader.readLine(); System.out.println("重新连接后接收到的消息:" + msg); } msg = msg.replace("\r\n", "\\r\\n"); System.out.println("设备应答:" + msg); System.out.println("指令执行成功!"); Thread.sleep(100); return msg; } catch (Exception e) { e.printStackTrace(); } return "发送指令:"+msg+"失败"; } }