文章目录
前言
经常写tcp,最近需求突然要搞udp和tcp监听同一端口号。
一、tcp和udp区别
TCP 是面向连接的,UDP 是面向无连接的
UDP程序结构较简单
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
二、netty创建服务
1.tcp服务
代码如下(示例):
public class TcpServer {
public static void main(String[] args) throws Exception {
//创建bossGroup,workGroup
//bossGroup只处理连接请求,真正的和客户的业务处理会交给workGroup完成
// 两个都是无限循环
//bossGroup,workerGroup含有的子线程(NioEventLoopGroup)默认有cpu核数*2
// 指定bossgroup一个线程
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
// 创建服务器端的启动对象,配置参数
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap.group(bossGroup, workerGroup)//设置两个线程组
.channel(NioServerSocketChannel.class)//服务器端通道
.option(ChannelOption.SO_BACKLOG, 128)//设置线程队列得到的连接数
.childOption(ChannelOption.SO_KEEPALIVE, true)//设置保持活动链接状态
.childHandler(new ChannelInitializer<SocketChannel>() {
//匿名创建一个测试对象
//给pipeline设置处理器
@Override
protected void initChannel(SocketChannel socketChannel) {
//给我们的workerGroup的EventLoop对应的管道设置处理器
socketChannel.pipeline().addLast(new NettyServerHandler());
}
});
System.out.println("........tcp服务监听启动.....");
// 绑定一个端口并且同步,生成一个channelFuture对象
//启动服务器并绑定端口
ChannelFuture cf = bootstrap.bind(