最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot快速搭建TCP服務(wù)端和客戶端全過程

 更新時間:2025年05月12日 14:45:22   作者:摘星編程  
這篇文章主要介紹了SpringBoot快速搭建TCP服務(wù)端和客戶端全過程,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

由于工作需要,研究了SpringBoot搭建TCP通信的過程,對于工程需要的小伙伴,只是想快速搭建一個可用的服務(wù)。

其他的教程看了許多,感覺講得太復(fù)雜,很容易弄亂,這里我只講效率,展示快速搭建過程。

TCPServer

由于TCP協(xié)議是Netty實(shí)現(xiàn)的,所以引入Netty的依賴

<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-all</artifactId>
  <version>4.1.25.Final</version>
</dependency>

配置TCPServer

@Component
@Slf4j
@Data
@ConfigurationProperties(prefix = "tcp.server")
public class TCPServer implements CommandLineRunner {
    private Integer port;

    @Override
    public void run(String... args) throws Exception {
        EventLoopGroup bossGroup = new NioEventLoopGroup();
        EventLoopGroup workerGroup = new NioEventLoopGroup();
        try {
            ServerBootstrap bootstrap = new ServerBootstrap();
            bootstrap.group(bossGroup, workerGroup)
            .channel(NioServerSocketChannel.class)
            .childHandler(new ChannelInitializer<Channel>() {
                @Override
                protected void initChannel(Channel channel) throws Exception {
                    ChannelPipeline pipeline = channel.pipeline();
                    pipeline.addLast(new StringEncoder());
                    pipeline.addLast(new StringDecoder());
                    pipeline.addLast(new TCPServerHandler());
                }
            })
            .option(ChannelOption.SO_BACKLOG, 128)
            .childOption(ChannelOption.SO_KEEPALIVE, true);

            ChannelFuture future = bootstrap.bind(port).sync();
            log.info("TCP server started and listening on port " + port);

            future.channel().closeFuture().sync();
        } finally {
            workerGroup.shutdownGracefully();
            bossGroup.shutdownGracefully();
        }
    }
}

application.yml配置文件

tcp:
 server:
  port: 8888 #服務(wù)器端口

配置TCPServerHandler

@Slf4j
@Component
public class TCPServerHandler extends SimpleChannelInboundHandler<String> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) {
        log.info("收到客戶端消息:/n"+ msg);
        Object parse = JSONUtils.parse(msg);
        System.out.println("parse = " + parse);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        log.error("TCPServer出現(xiàn)異常", cause);
        ctx.close();
    }
}

TCPClient

客戶端的配置大同小異

Netty依賴

<dependency>
  <groupId>io.netty</groupId>
  <artifactId>netty-all</artifactId>
  <version>4.1.25.Final</version>
</dependency>

配置TCPClient

@Component
@Slf4j
@Data
@ConfigurationProperties(prefix = "tcp.client")
public class TCPClient implements CommandLineRunner {
    private String host ;
    private Integer port;
    @Override
    public void run(String... args) throws Exception {
        EventLoopGroup group = new NioEventLoopGroup();
        try {
            Bootstrap bootstrap = new Bootstrap()
                    .group(group)
                    .channel(NioSocketChannel.class)
                    .handler(new ChannelInitializer<SocketChannel>() {
                        @Override
                        protected void initChannel(SocketChannel ch) throws Exception {
                            ChannelPipeline pipeline = ch.pipeline();
                            pipeline.addLast(new StringEncoder());
                            pipeline.addLast(new StringDecoder());
                            pipeline.addLast(new TCPClientHandler());
                        }
                    });
            ChannelFuture future = bootstrap.connect(host, port).sync();
            log.info("TCPClient Start , Connect host:"+host+":"+port);
            future.channel().closeFuture().sync();
        } catch (Exception e) {
            log.error("TCPClient Error", e);
        } finally {
            group.shutdownGracefully();
        }
    }
}

application.yml配置文件

tcp:
 client:
  port: 8080 #連接的服務(wù)器端口
  host: 127.0.0.1 #連接的服務(wù)器域名

配置TCPServerHandler

@Slf4j
@Component
public class TCPClientHandler extends SimpleChannelInboundHandler<String> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, String msg) {
        log.info("Receive TCPServer Message:\n"+ msg);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        log.error("TCPClient Error", cause);
        ctx.close();
    }
}

這樣就完成了整個搭建過程,重要的就是服務(wù)端的端口和客戶端連接服務(wù)端的URL和接受消息的處理方式,其他的細(xì)節(jié)可以自己慢慢探索。

總結(jié)

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MyBatis配置不同級別的日志輸出

    MyBatis配置不同級別的日志輸出

    MyBatis提供多種日志框架集成,如SLF4J、Log4j2、Logback等,通過配置日志框架和調(diào)整日志級別,可以實(shí)現(xiàn)詳細(xì)的SQL日志記錄,本文就來介紹一下,感興趣的可以了解一下
    2024-12-12
  • jxls2.4.5如何動態(tài)導(dǎo)出excel表頭與數(shù)據(jù)

    jxls2.4.5如何動態(tài)導(dǎo)出excel表頭與數(shù)據(jù)

    這篇文章主要介紹了jxls2.4.5如何動態(tài)導(dǎo)出excel表頭與數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • MAC下如何設(shè)置JDK環(huán)境變量

    MAC下如何設(shè)置JDK環(huán)境變量

    這篇文章主要介紹了MAC下如何設(shè)置JDK環(huán)境變量問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • java的http請求工具對比分析

    java的http請求工具對比分析

    本文對比了Java中五種流行的HTTP客戶端庫:HttpURLConnection、ApacheHttpClient、OkHttp、Feign和SpringRestTemplate,涵蓋了它們的特性、優(yōu)勢、劣勢以及適用場景,感興趣的朋友一起看看吧
    2025-03-03
  • 手把手教你搞懂冒泡排序和選擇排序

    手把手教你搞懂冒泡排序和選擇排序

    這篇文章主要介紹了java數(shù)組算法例題代碼詳解(冒泡排序,選擇排序),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • springboot集成mqtt的實(shí)踐開發(fā)

    springboot集成mqtt的實(shí)踐開發(fā)

    本篇文章主要介紹了springboot集成mqtt的實(shí)踐開發(fā),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • springcloud下hibernate本地化方言配置方式

    springcloud下hibernate本地化方言配置方式

    這篇文章主要介紹了springcloud下hibernate本地化方言配置方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Mybatis錯誤引起的程序啟動卡死問題及解決

    Mybatis錯誤引起的程序啟動卡死問題及解決

    這篇文章主要介紹了Mybatis錯誤引起的程序啟動卡死問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java編程中ArrayList源碼分析

    Java編程中ArrayList源碼分析

    這篇文章主要介紹了Java編程中ArrayList源碼分析,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Java學(xué)習(xí)字符串之方法返回、跳出嵌套循環(huán)及正則表達(dá)式

    Java學(xué)習(xí)字符串之方法返回、跳出嵌套循環(huán)及正則表達(dá)式

    這篇文章主要介紹了Java學(xué)習(xí)字符串之方法返回、跳出嵌套循環(huán)及正則表達(dá)式的相關(guān)資料,包括字符串的基本操作(如長度、截取、替換等)以及正則表達(dá)式的匹配和替換操作,需要的朋友可以參考下
    2026-03-03

最新評論

鄂州市| 克拉玛依市| 海林市| 都匀市| 高唐县| 霍城县| 锡林郭勒盟| 左权县| 遵化市| 繁昌县| 南康市| 黑河市| 莎车县| 东明县| 澄迈县| 抚远县| 宜兰县| 沾益县| 无为县| 温泉县| 江口县| 富宁县| 革吉县| 密山市| 江西省| 南充市| 阳高县| 青河县| 五莲县| 常熟市| 普宁市| 泽库县| 宣城市| 若尔盖县| 锡林浩特市| 抚顺县| 九龙坡区| 布尔津县| 建宁县| 界首市| 句容市|