欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實(shí)現(xiàn)TCP連接并進(jìn)行數(shù)據(jù)互傳的方法

 更新時(shí)間:2025年01月10日 14:56:38   作者:liaozk_c  
本文詳細(xì)介紹了微服務(wù)架構(gòu)中的翻譯組件使用場(chǎng)景,以及多種開源翻譯組件的解決方案,文中分析了國(guó)內(nèi)外多個(gè)翻譯服務(wù)如百度翻譯、谷歌翻譯等,以及如何在微服務(wù)項(xiàng)目中集成這些翻譯組件,感興趣的朋友跟隨小編一起看看吧

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();
    }
    /**
     * 發(fā)送數(shù)據(jù)
     * @param data
     * @return
     */
    @GetMapping("/send")
    public boolean send(@RequestParam("data") String data) {
        return tcpClientUtil.sendData(data);
    }
    /**
     * 發(fā)送數(shù)據(jù)(有返回?cái)?shù)據(jù))
     * @param data
     * @return
     */
    @GetMapping("/sendData")
    public String sendDataToServer(@RequestParam("data") String data) {
        return tcpClientUtil.sendDataToServer(data);
    }
    /**
     * 獲取連接狀態(tài)
     * @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()));
                // 發(fā)送數(shù)據(jù)到TCP服務(wù)器
                outputStream.write(data.getBytes(StandardCharsets.UTF_8));
                outputStream.flush();
                // 讀取服務(wù)器返回的數(shù)據(jù)(如果需要處理返回內(nèi)容的話)
                String response = reader.readLine();
                if (response!= null) {
                    logger.info("從TCP服務(wù)器接收到的響應(yīng): {}", response);
                }
                return response;
            }
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            lock.unlock();
        }
        return null;
    }
    public boolean isConnected() {
        return isConnected;
    }
}

到此這篇關(guān)于SpringBoot實(shí)現(xiàn)TCP連接并進(jìn)行數(shù)據(jù)互傳的文章就介紹到這了,更多相關(guān)Docker翻譯組件Deepl使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis3使用@Select等注解實(shí)現(xiàn)增刪改查操作

    mybatis3使用@Select等注解實(shí)現(xiàn)增刪改查操作

    這篇文章主要介紹了mybatis3使用@Select等注解實(shí)現(xiàn)增刪改查操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • Apache Calcite進(jìn)行SQL解析(java代碼實(shí)例)

    Apache Calcite進(jìn)行SQL解析(java代碼實(shí)例)

    Calcite是一款開源SQL解析工具, 可以將各種SQL語(yǔ)句解析成抽象語(yǔ)法樹AST(Abstract Syntax Tree), 之后通過(guò)操作AST就可以把SQL中所要表達(dá)的算法與關(guān)系體現(xiàn)在具體代碼之中,今天通過(guò)代碼實(shí)例給大家介紹Apache Calcite進(jìn)行SQL解析問(wèn)題,感興趣的朋友一起看看吧
    2022-01-01
  • Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼)

    Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼)

    這篇文章主要介紹了Spring AOP如何自定義注解實(shí)現(xiàn)審計(jì)或日志記錄(完整代碼),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Spring中的@Conditional注解實(shí)現(xiàn)分析

    Spring中的@Conditional注解實(shí)現(xiàn)分析

    這篇文章主要介紹了Spring中的@Conditional注解實(shí)現(xiàn)分析,  @Conditional是Spring 4出現(xiàn)的注解,但是真正露出價(jià)值的是Spring Boot的擴(kuò)展@ConditionalOnBean等,需要的朋友可以參考下
    2023-12-12
  • 簡(jiǎn)單的用java實(shí)現(xiàn)讀/寫文本文件的示例

    簡(jiǎn)單的用java實(shí)現(xiàn)讀/寫文本文件的示例

    同時(shí)也展示了如果從輸入流中讀出來(lái)內(nèi)容寫入輸出流中(僅限文本流) 三個(gè)例子可以獨(dú)立存在,所以根據(jù)需要只看其中一個(gè)就行了。
    2008-07-07
  • JDK動(dòng)態(tài)代理過(guò)程原理及手寫實(shí)現(xiàn)詳解

    JDK動(dòng)態(tài)代理過(guò)程原理及手寫實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了JDK動(dòng)態(tài)代理過(guò)程原理及手寫實(shí)現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • SpringDataJpa like查詢無(wú)效的解決

    SpringDataJpa like查詢無(wú)效的解決

    這篇文章主要介紹了SpringDataJpa like查詢無(wú)效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 如何使用ByteArrayOutputStream下載文件

    如何使用ByteArrayOutputStream下載文件

    這篇文章主要介紹了如何使用ByteArrayOutputStream下載文件方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • mybatis-plus的批量新增/批量更新以及問(wèn)題

    mybatis-plus的批量新增/批量更新以及問(wèn)題

    這篇文章主要介紹了Mybatis-Plus實(shí)現(xiàn)批量新增與批量更新以及出現(xiàn)的問(wèn)題,文章中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考一下
    2023-04-04
  • java實(shí)現(xiàn)俄羅斯方塊

    java實(shí)現(xiàn)俄羅斯方塊

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06

最新評(píng)論