导入netty4的依赖
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.28.Final</version>
</dependency>
客户端
/**
* 客户端
*/
public class Client {
//线程组
private static final EventLoopGroup group = new NioEventLoopGroup();
//启动类
private static final Bootstrap bootstrap = new Bootstrap();
private static final int PORT = 6789;
private static final String HOST = "127.0.0.1";
public static void start() throws InterruptedException {
try {
bootstrap.group(group)
.remoteAddress(new InetSocketAddress(HOST, PORT))
//长连接
.option(ChannelOption.SO_KEEPALIVE, true)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<Channel>() {
protected void initChannel(Channel channel) throws Exception {
//包含编码器和解码器
channel.pipeline().addLast(new HttpClientCodec());
//聚合
channel.pipeline().addLast(new HttpObjectAggregator(1024 * 10 * 1024));
//解压
channel.pipeline().addLast(new HttpContentDecompressor());
channel.pipeline().addLast(new ClientHandler());
}
});
ChannelFuture channelFuture = bootstrap.connect().sync();
channelFuture.channel().closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
group.shutdownGracefully();
}
}
public static void main(String[] args) throws InterruptedException {
Client.start();
}
}
客户端处理器
/**
* 客户端处理器
*/
public class ClientHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
FullHttpResponse response = (FullHttpResponse) msg;
ByteBuf content = response.content();
HttpHeaders headers = response.headers();
System.out.println("content:" + System.getProperty("line.separator") + content.toString(CharsetUtil.UTF_8));
System.out.println("headers:" + System.getProperty("line.separator") + headers.toString());
}
@Override
public void channelActive(ChannelHandlerContext ctx) throws Exception {
URI url = new URI("/test");
String meg = "hello";
//配置HttpRequest的请求数据和一些配置信息
FullHttpRequest request = new DefaultFullHttpRequest(
HttpVersion.HTTP_1_0, HttpMethod.GET, url.toASCIIString(), Unpooled.wrappedBuffer(meg.getBytes("UTF-8")));
request.headers()
.set(HttpHeaderNames.CONTENT_TYPE, "text/plain;charset=UTF-8")
//开启长连接
.set(HttpHeaderNames.CONNECTION, HttpHeaderValues.KEEP_ALIVE)
//设置传递请求内容的长度
.set(HttpHeaderNames.CONTENT_LENGTH, request.content().readableBytes());
//发送数据
ctx.writeAndFlush(request);
}
}