ExecutionServer.java 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package com.zksy.lamp.server;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.stereotype.Component;
  6. import javax.annotation.PostConstruct;
  7. import javax.annotation.PreDestroy;
  8. import java.io.*;
  9. import java.net.ServerSocket;
  10. import java.net.Socket;
  11. /**
  12. * @author Administrator
  13. * @version 1.0
  14. * @project dh-server-micro
  15. * @description 指令执行
  16. * @date 2025/2/10 16:25:14
  17. */
  18. @Component
  19. public class ExecutionServer {
  20. private static final Logger log = LoggerFactory.getLogger(ExecutionServer.class);
  21. private BufferedReader reader;
  22. private BufferedWriter writer;
  23. private ServerSocket server;
  24. private Socket client;
  25. private int serverPort = 15678;
  26. @PostConstruct
  27. public void init(){
  28. Runnable func0 = this::startServer;
  29. Thread thread = new Thread(func0);
  30. thread.start();
  31. }
  32. @PreDestroy
  33. public void closeResource(){
  34. try {
  35. if (reader != null) reader.close();
  36. if (writer != null) writer.close();
  37. if (client != null) client.close();
  38. if (server != null) server.close();
  39. } catch (IOException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. /**
  44. * 启动服务器并等待客户端连接
  45. */
  46. public void startServer() {
  47. try {
  48. System.out.println("本机作为服务端");
  49. System.out.println("本机端口:" + serverPort);
  50. server = new ServerSocket(serverPort);
  51. System.out.println("等待客户机的连接");
  52. client = server.accept();
  53. System.out.println("连接成功");
  54. reader = new BufferedReader(new InputStreamReader(client.getInputStream(), "GB2312"));
  55. writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream(), "GB2312"));
  56. System.out.println("测试完成!");
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. }
  61. public String ExecutionData(String msg) {
  62. try {
  63. String returnMsgReplace = "";
  64. System.out.println("第1路闭合,发送指令:"+msg);
  65. //发送数据
  66. writer.write(msg);
  67. writer.flush();
  68. //读数据
  69. String returnMsg = reader.readLine();
  70. System.out.println("returnMsg================:"+returnMsg);
  71. if (returnMsg != null) {
  72. returnMsgReplace = returnMsg.replace("\r\n", "\\r\\n");
  73. System.out.println("设备应答:" + returnMsgReplace);
  74. } else {
  75. System.out.println("接收到的消息为 null,重新建立连接...");
  76. // 关闭当前连接资源
  77. closeResource();
  78. // 重新启动服务器并等待客户端连接
  79. startServer();
  80. // 重新发送指令
  81. writer.write(msg);
  82. writer.flush();
  83. String returnMsg2 = reader.readLine();
  84. returnMsgReplace = returnMsg2.replace("\r\n", "\\r\\n");
  85. System.out.println("重新连接后接收到的消息:" + returnMsgReplace);
  86. }
  87. if("AT".equals(returnMsgReplace)) {
  88. String s = "AT+ACK\r\n";
  89. writer.write(s);
  90. writer.flush();
  91. }
  92. System.out.println("指令执行成功!");
  93. return returnMsgReplace;
  94. } catch (Exception e) {
  95. log.info(e.toString());
  96. throw new RuntimeException("指令执行失败");
  97. }
  98. }
  99. }