ExecutionServer.java 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package com.zksy.lamp.server;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.stereotype.Component;
  4. import javax.annotation.PostConstruct;
  5. import javax.annotation.PreDestroy;
  6. import java.io.*;
  7. import java.net.ServerSocket;
  8. import java.net.Socket;
  9. /**
  10. * @author Administrator
  11. * @version 1.0
  12. * @project dh-server-micro
  13. * @description 指令执行
  14. * @date 2025/2/10 16:25:14
  15. */
  16. @Component
  17. public class ExecutionServer {
  18. private BufferedReader reader;
  19. private BufferedWriter writer;
  20. private ServerSocket server;
  21. private Socket client;
  22. private int serverPort = 15678;
  23. @PostConstruct
  24. public void init(){
  25. Runnable func0 = this::startServer;
  26. Thread thread = new Thread(func0);
  27. thread.start();
  28. }
  29. @PreDestroy
  30. public void closeResource(){
  31. try {
  32. if (reader != null) reader.close();
  33. if (writer != null) writer.close();
  34. if (client != null) client.close();
  35. if (server != null) server.close();
  36. } catch (IOException e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. /**
  41. * 启动服务器并等待客户端连接
  42. */
  43. public void startServer() {
  44. try {
  45. System.out.println("本机作为服务端");
  46. System.out.println("本机端口:" + serverPort);
  47. server = new ServerSocket(serverPort);
  48. System.out.println("等待客户机的连接");
  49. client = server.accept();
  50. System.out.println("连接成功");
  51. String clientAddr = client.getRemoteSocketAddress().toString().substring(1);
  52. String[] clientAddrs = clientAddr.split(":");
  53. System.out.println("客户端IP:" + clientAddrs[0] + " 端口:" + clientAddrs[1]);
  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. System.out.println("第1路闭合,发送指令:"+msg);
  64. //发送数据
  65. writer.write(msg);
  66. writer.flush();
  67. //读数据
  68. msg = reader.readLine();
  69. System.out.println("msg================:"+msg);
  70. if (msg != null) {
  71. msg = msg.replace("\r\n", "\\r\\n");
  72. } else {
  73. System.out.println("接收到的消息为 null,重新建立连接...");
  74. // 关闭当前连接资源
  75. closeResource();
  76. // 重新启动服务器并等待客户端连接
  77. startServer();
  78. // 重新发送指令
  79. writer.write(msg);
  80. writer.flush();
  81. msg = reader.readLine();
  82. System.out.println("重新连接后接收到的消息:" + msg);
  83. }
  84. msg = msg.replace("\r\n", "\\r\\n");
  85. System.out.println("设备应答:" + msg);
  86. System.out.println("指令执行成功!");
  87. Thread.sleep(100);
  88. return msg;
  89. } catch (Exception e) {
  90. e.printStackTrace();
  91. }
  92. return "发送指令:"+msg+"失败";
  93. }
  94. }