netty之hello-world
服务端
package com.netty;
import io.netty.bootstrap.ServerBootstrap;
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 2021.10.27 14:59
*/
public class HelloServer {
public static void main(String[] args) {
//1.启动器,负责组装netty 组件,启动服务器
new ServerBootstrap()
//2. BossEventLoop WorkerEventLoop(selector thread) group 组
.group(new NioEventLoopGroup())
//3.选择服务器的serverSocketChannel 实现
.channel(NioServerSocketChannel.class)
//4.boss 负责处理连接 worker(child) 负责处理读写 决定了worker(child) 能执行那些操作 (handler)
.childHandler(
//5.channel 代表和客户端尽心那个数据读写的通道 Initializer 初始化,负责添加别的 handler
new ChannelInitializer<NioSocketChannel>() {
@Override
protected void initChannel(NioSocketChannel ch) throws Exception {
//6.添加具体的handler
ch.pipeline().addLast(new StringDecoder()); //将ByteBuf转换为字符串
ch.pipeline().addLast(new ChannelInboundHandlerAdapter(){ //自定义handler
//读事件
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
//打印上一步转换好的字符串
System.out.println(msg);
}
});
}
})
//7.绑定监听端口
.bind(8080);
}
}
客户端
package com.netty;
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 2021.10.27 15:15
*/
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("127.0.0.1",8080))
.sync() //阻塞方法,直到连接建立
.channel()
//6.向服务器发送数据
.writeAndFlush("hello world");
}
}