123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- 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);
- }
- }
|