SendMsgThread.java 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.fd.socket;
  2. import lombok.extern.log4j.Log4j2;
  3. import org.springframework.util.StringUtils;
  4. import java.io.BufferedReader;
  5. import java.io.IOException;
  6. import java.io.InputStreamReader;
  7. import java.io.OutputStream;
  8. import java.net.Socket;
  9. import java.util.ArrayList;
  10. import java.util.Arrays;
  11. import java.util.List;
  12. /**
  13. * 多线程封装: 发送端
  14. *
  15. * 1 发送消息
  16. * 2 从控制台获取消息
  17. * 3 释放资源
  18. * 4 重写run方法
  19. */
  20. @Log4j2
  21. public class SendMsgThread implements Runnable {
  22. private Socket client;
  23. private boolean isRunning;
  24. private String message;
  25. // 字节输出流
  26. private OutputStream out;
  27. private BufferedReader buf;
  28. public SendMsgThread(Socket client, String message) {
  29. this.client = client;
  30. this.message = message;
  31. try {
  32. out = client.getOutputStream();
  33. isRunning = true;
  34. } catch (IOException e) {
  35. log.error("error SendMsgThread");
  36. release();
  37. }
  38. }
  39. @Override
  40. public void run() {
  41. send();
  42. while (isRunning) {
  43. try {
  44. buf = new BufferedReader(new InputStreamReader(client.getInputStream()));
  45. String msg = buf.readLine();
  46. if (StringUtils.isEmpty(msg)) {
  47. log.error("没有收到服务端消息!");
  48. throw new Exception("没有收到服务端消息!");
  49. }
  50. if ("JP".equals(msg)) {
  51. log.info("硬件拍照完成! : {}", msg);
  52. }
  53. if ("JI".equals(msg)) {
  54. log.info("socketServer数据确认成功! : {}", msg);
  55. }
  56. // 关闭接收信息
  57. isRunning = false;
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. log.error("error SendMsgThread");
  61. release();
  62. }
  63. }
  64. }
  65. //发送消息
  66. private void send(){
  67. try {
  68. // 以字节写入
  69. out.write(this.message.getBytes());
  70. out.flush();
  71. log.info("send msg: {}", this.message);
  72. } catch (IOException e) {
  73. log.error("error SendMsgThread");
  74. release();
  75. }
  76. }
  77. //释放资源
  78. private void release(){
  79. // 关闭循环
  80. this.isRunning = false;
  81. CloseUtils.close(out, buf, client);
  82. }
  83. }