下面是详细讲解“Springboot+TCP监听服务器搭建过程图解”的完整攻略。
一、准备工作
-
Java环境:需要安装JDK1.8及以上版本。
-
IDE工具:可以选择Eclipse、IntelliJ IDEA、Spring Tool Suite等Java开发工具。
-
Maven:在本地安装Maven,可以通过Maven管理项目依赖。
二、创建Springboot项目
-
使用IDEA创建一个新的Springboot项目,选择Web、Thymeleaf、Devtools等相关组件,创建完成后,在pom.xml中添加Netty的依赖。
-
在src/main/java目录下创建一个Run类,使用@SpringBootApplication注解启动Springboot项目。
三、创建TCP服务器
- 在src/main/java目录下创建一个TCPServer类,使用@ChannelHandler.Sharable注解标记,说明可以被多个Channel共享,继承SimpleChannelInboundHandler类,覆盖channelRead0方法实现业务逻辑。
```java
@Sharable
public class TCPServer extends SimpleChannelInboundHandler
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
// 处理业务逻辑
}
}
```
- 在Run类中通过ServerBootstrap类创建TCP服务器,配置监听端口、ChannelHandler等参数。
```java
@SpringBootApplication
public class Run {
private static final Logger logger = LoggerFactory.getLogger(Run.class);
@Bean
public void run() {
NioEventLoopGroup bossGroup = new NioEventLoopGroup(1);
NioEventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap()
.group(bossGroup, workerGroup)
.option(ChannelOption.SO_BACKLOG, 1024)
.childOption(ChannelOption.SO_KEEPALIVE, true)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel) throws Exception {
ChannelPipeline pipeline = socketChannel.pipeline();
pipeline.addLast(new TCPServer());
}
});
ChannelFuture future = bootstrap.bind(8080).sync();
logger.info("TCP server started successfully on port:8080");
future.channel().closeFuture().sync();
} catch (Exception e) {
logger.error("TCP server start error:{}", e.getMessage());
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
public static void main(String[] args) {
SpringApplication.run(Run.class, args);
}
}
```
四、启动TCP服务器
-
编译、打包项目,启动Springboot项目。
-
使用Telnet连接TCP服务器,发送消息进行测试。
sh
telnet 127.0.0.1 8080
五、示例说明
示例一:统计客户端发送的总数
在TCPServer类中新增一个静态变量count,每次收到消息时count加一。
@Sharable
public class TCPServer extends SimpleChannelInboundHandler<Object> {
private static int count = 0;
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
count++;
// 处理业务逻辑
}
public static int getCount() {
return count;
}
}
示例二:使用自定义协议进行通信
使用自定义协议进行客户端和服务器之间的通信。规定消息总长度为6个字节,前两个字节表示消息类型(00表示心跳消息,01表示普通消息),后四个字节表示消息内容的长度。
@Sharable
public class TCPServer extends SimpleChannelInboundHandler<Object> {
private static final Logger logger = LoggerFactory.getLogger(TCPServer.class);
@Override
protected void channelRead0(ChannelHandlerContext channelHandlerContext, Object o) throws Exception {
ByteBuf byteBuf = (ByteBuf) o;
byte[] bytes = new byte[byteBuf.readableBytes()];
byteBuf.readBytes(bytes);
if (bytes.length != 6) {
logger.error("invalid message");
return;
}
String type = new String(new byte[]{bytes[0], bytes[1]});
int contentLength = Integer.parseInt(new String(new byte[]{bytes[2], bytes[3], bytes[4], bytes[5]}));
if (contentLength == 0) {
logger.warn("empty message");
return;
}
ByteBuf contentBuf = byteBuf.slice(6, contentLength);
byte[] contentBytes = new byte[contentBuf.readableBytes()];
contentBuf.readBytes(contentBytes);
String content = new String(contentBytes);
logger.info("receive message type:{}, content:{}", type, content);
}
}
通过使用自定义协议,可以更好地控制通信内容,提高通信的安全性和可靠性。
以上就是完整的“Springboot+TCP监听服务器搭建过程图解”的攻略,希望对您有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot+TCP监听服务器搭建过程图解 - Python技术站