SpringBoot实现TCP连接并进行数据互传的方法

 更新时间:2025年01月10日 14:56:38   作者:liaozk_c  
本文详细介绍了微服务架构中的翻译组件使用场景,以及多种开源翻译组件的解决方案,文中分析了国内外多个翻译服务如百度翻译、谷歌翻译等,以及如何在微服务项目中集成这些翻译组件,感兴趣的朋友跟随小编一起看看吧

application.yml

tcp:
  server:
    ip: 192.168.173.25
    port: 20140
server:
  port: 6000

TcpDataSenderController

import com.example.tcpclient.utils.TcpClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
 * tcp接口
 */
@RestController
@RequestMapping("/tcp")
public class TcpDataSenderController {
    private final TcpClientUtil tcpClientUtil;
    @Autowired
    public TcpDataSenderController(TcpClientUtil tcpClientUtil) {
        this.tcpClientUtil = tcpClientUtil;
    }
    /**
     * 连接
     * @return
     */
    @GetMapping("/connect")
    public boolean connect() {
        return tcpClientUtil.connect();
    }
    /**
     * 断开连接
     * @return
     */
    @GetMapping("/disconnect")
    public boolean disconnect() {
        return tcpClientUtil.disconnect();
    }
    /**
     * 发送数据
     * @param data
     * @return
     */
    @GetMapping("/send")
    public boolean send(@RequestParam("data") String data) {
        return tcpClientUtil.sendData(data);
    }
    /**
     * 发送数据(有返回数据)
     * @param data
     * @return
     */
    @GetMapping("/sendData")
    public String sendDataToServer(@RequestParam("data") String data) {
        return tcpClientUtil.sendDataToServer(data);
    }
    /**
     * 获取连接状态
     * @return
     */
    @GetMapping("/status")
    public boolean status() {
        return tcpClientUtil.isConnected();
    }
}

TcpClientUtil

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
@Component
public class TcpClientUtil {
    private static final Logger logger = LoggerFactory.getLogger(TcpClientUtil.class);
    @Value("${tcp.server.ip}")
    private String tcpServerIp;
    @Value("${tcp.server.port}")
    private int tcpServerPort;
    private Socket socket;
    private OutputStream outputStream;
    private Lock lock = new ReentrantLock();
    private boolean isConnected = false;
    public boolean connect() {
        lock.lock();
        try {
            if (!isConnected) {
                socket = new Socket(tcpServerIp, tcpServerPort);
                outputStream = socket.getOutputStream();
                isConnected = true;
                return true;
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            lock.unlock();
        }
    }
    public boolean disconnect() {
        lock.lock();
        try {
            if (isConnected) {
                if (outputStream != null) {
                    try {
                        outputStream.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
                isConnected = false;
                return true;
            }
            return false;
        } finally {
            lock.unlock();
        }
    }
    public boolean sendData(String data) {
        lock.lock();
        try {
            if (isConnected) {
                byte[] bytes = data.getBytes();
                outputStream.write(bytes);
                outputStream.flush();
                return true;
            }
            return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        } finally {
            lock.unlock();
        }
    }
    public String sendDataToServer(String data) {
        lock.lock();
        try {
            if (isConnected) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                // 发送数据到TCP服务器
                outputStream.write(data.getBytes(StandardCharsets.UTF_8));
                outputStream.flush();
                // 读取服务器返回的数据(如果需要处理返回内容的话)
                String response = reader.readLine();
                if (response!= null) {
                    logger.info("从TCP服务器接收到的响应: {}", response);
                }
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            lock.unlock();
        }
        return null;
    }
    public boolean isConnected() {
        return isConnected;
    }
}

到此这篇关于SpringBoot实现TCP连接并进行数据互传的文章就介绍到这了,更多相关Docker翻译组件Deepl使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mybatis3使用@Select等注解实现增删改查操作

    mybatis3使用@Select等注解实现增删改查操作

    这篇文章主要介绍了mybatis3使用@Select等注解实现增删改查操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Apache Calcite进行SQL解析(java代码实例)

    Apache Calcite进行SQL解析(java代码实例)

    Calcite是一款开源SQL解析工具, 可以将各种SQL语句解析成抽象语法树AST(Abstract Syntax Tree), 之后通过操作AST就可以把SQL中所要表达的算法与关系体现在具体代码之中,今天通过代码实例给大家介绍Apache Calcite进行SQL解析问题,感兴趣的朋友一起看看吧
    2022-01-01
  • Spring AOP如何自定义注解实现审计或日志记录(完整代码)

    Spring AOP如何自定义注解实现审计或日志记录(完整代码)

    这篇文章主要介绍了Spring AOP如何自定义注解实现审计或日志记录(完整代码),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Spring中的@Conditional注解实现分析

    Spring中的@Conditional注解实现分析

    这篇文章主要介绍了Spring中的@Conditional注解实现分析,  @Conditional是Spring 4出现的注解,但是真正露出价值的是Spring Boot的扩展@ConditionalOnBean等,需要的朋友可以参考下
    2023-12-12
  • 简单的用java实现读/写文本文件的示例

    简单的用java实现读/写文本文件的示例

    同时也展示了如果从输入流中读出来内容写入输出流中(仅限文本流) 三个例子可以独立存在,所以根据需要只看其中一个就行了。
    2008-07-07
  • JDK动态代理过程原理及手写实现详解

    JDK动态代理过程原理及手写实现详解

    这篇文章主要为大家介绍了JDK动态代理过程原理及手写实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • SpringDataJpa like查询无效的解决

    SpringDataJpa like查询无效的解决

    这篇文章主要介绍了SpringDataJpa like查询无效的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 如何使用ByteArrayOutputStream下载文件

    如何使用ByteArrayOutputStream下载文件

    这篇文章主要介绍了如何使用ByteArrayOutputStream下载文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • mybatis-plus的批量新增/批量更新以及问题

    mybatis-plus的批量新增/批量更新以及问题

    这篇文章主要介绍了Mybatis-Plus实现批量新增与批量更新以及出现的问题,文章中有详细的代码示例,感兴趣的同学可以参考一下
    2023-04-04
  • java实现俄罗斯方块

    java实现俄罗斯方块

    这篇文章主要为大家详细介绍了java实现俄罗斯方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论