package com.fd.socket; import lombok.extern.log4j.Log4j2; import org.springframework.util.StringUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * 多线程封装: 发送端 * * 1 发送消息 * 2 从控制台获取消息 * 3 释放资源 * 4 重写run方法 */ @Log4j2 public class SendMsgThread implements Runnable { private Socket client; private boolean isRunning; private String message; // 字节输出流 private OutputStream out; private BufferedReader buf; public SendMsgThread(Socket client, String message) { this.client = client; this.message = message; try { out = client.getOutputStream(); isRunning = true; } catch (IOException e) { log.error("error SendMsgThread"); release(); } } @Override public void run() { send(); while (isRunning) { try { buf = new BufferedReader(new InputStreamReader(client.getInputStream())); String msg = buf.readLine(); if (StringUtils.isEmpty(msg)) { log.error("没有收到服务端消息!"); throw new Exception("没有收到服务端消息!"); } if ("JP".equals(msg)) { log.info("硬件拍照完成! : {}", msg); } if ("JI".equals(msg)) { log.info("socketServer数据确认成功! : {}", msg); } // 关闭接收信息 isRunning = false; } catch (Exception e) { e.printStackTrace(); log.error("error SendMsgThread"); release(); } } } //发送消息 private void send(){ try { // 以字节写入 out.write(this.message.getBytes()); out.flush(); log.info("send msg: {}", this.message); } catch (IOException e) { log.error("error SendMsgThread"); release(); } } //释放资源 private void release(){ // 关闭循环 this.isRunning = false; CloseUtils.close(out, buf, client); } }