首先引入netty的依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.39.Final</version>
</dependency>
然后编写服务端代码
package com.wxit.netty.c1;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringDecoder;
/**
* @author wj
* @date 2022.11.14 22:08
*/
public class HelloServer {
public static void main(String[] args) {
//1.启动器,负责组装netty 组件,启动服务器
new ServerBootstrap()
//2. BossEventLoop WorkEventLoop(selector,thread) group 组
.group(new NioEventLoopGroup())
//3.选择服务器的ServerSocketChannel 实现
.channel(NioServerSocketChannel.class)
//4.boss 负责处理连接 work(child) 负责处理读写 ,决定了worker能执行哪些操作
.childHandler(
//5.channel 代表和客户端进行数据读写的通道 Initializer 初始化,负责添加别的handler
new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) throws Exception {
//6.添加具体的handler
ch.pipeline().addLast(new StringDecoder());
//自定义handler
ch.pipeline().addLast(new ChannelInboundHandlerAdapter() {
@Override //读事件
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
System.out.println(msg);
}
});
}
})
.bind(8080);
}
}
客户端代码如下
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.string.StringEncoder;
import java.net.InetSocketAddress;
/**
* @author wj
* @date 2022.11.14 22:22
*/
public class HelloClient {
public static void main(String[] args) throws InterruptedException {
//1.启动类
new Bootstrap()
//2.添加EventLoop
.group(new NioEventLoopGroup())
//3.选择客户端 channel 实现
.channel(NioSocketChannel.class)
//4.添加处理器
.handler(new ChannelInitializer<NioSocketChannel>() {
@Override //在建立连接之后被调用
protected void initChannel(NioSocketChannel ch) throws Exception {
ch.pipeline().addLast(new StringEncoder());
}
})
//5.连接到服务器
.connect(new InetSocketAddress("localhost",8080))
.sync()
.channel()
//6.向服务器发送数据
.writeAndFlush("hello,world");
}
}