本文主要是介绍SpringBoot快速搭建TCP服务端和客户端全过程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《SpringBoot快速搭建TCP服务端和客户端全过程》:本文主要介绍SpringBoot快速搭建TCP服务端和客户端全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,...
由于工作需要,研究了SpringBoot搭建TCP通信的过程,对于工程需要的小伙伴,只是想快速搭建一个可用的服务。
其他的教程看了许多,感觉讲得太复杂,很容易弄乱,这里我只讲效率,展示快速搭建过程。
TCPServer
由于TCP协议是Netty实现的,所以引入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 #服务器端口
配置TCPServerHandler
@Slf4j @Component public class TCPServerHandler extends SimpleChannelInboundHandler<String> { @Override protected void channelRead0(ChannelHandlerContexpythont 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出现异常", cause); ctx.close(); } }
TCPClient
客户端的配置大同小异
Netty依赖
<dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> &lChina编程t;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 initChannpythonel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new StringEncoder()); pipeline.addLast(new StringDecoder()); pipeline.addLast(new TCPClientHandler()); php } }); 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 #连接的服务器端口 host: 127.0.0.1 #连接的服务器域名
配置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(); } }
这样就完成了整个搭建过程,重要的就是服务端的端口和客户端连接服务端的URL和接受消息的处理方式,其他的细节可以自己慢慢探索。
总结
这篇关于SpringBoot快速搭建TCP服务端和客户端全过程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!