概述
Netty开发
一、pom引入
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.42.Final</version>
</dependency>
二、Netty服务器
1、服务端
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.bytes.ByteArrayDecoder;
import io.netty.handler.codec.bytes.ByteArrayEncoder;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
public class NettyClient {
public static void main(String[] args) {
//客户端只需要一个事件循环组
EventLoopGroup eventLoopGroup = null;
try {
eventLoopGroup = new NioEventLoopGroup();
//创建客户端启动对象
Bootstrap bootstrap = new Bootstrap();
//客户端启动对象配置
//设置线程组
bootstrap.group(eventLoopGroup)
//设置客户端通道的实现类
.channel(NioSocketChannel.class)
//给事件循环组设置对应的通道处理器
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel){
//字符串解码器
socketChannel.pipeline().addLast("docode", new StringDecoder());
//字符串编码器
socketChannel.pipeline().addLast("encode", new StringEncoder());
//信息读取处理器
socketChannel.pipeline().addLast(new ClientInputMessageHandler());
}
});
System.out.println("客户端启动...");
//启动客户端去连接服务器端
ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", 6666).sync();
//关闭通道进行监听
channelFuture.channel().closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
eventLoopGroup.shutdownGracefully();
}
}
}
2、服务端信息处理器
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.SimpleChannelInboundHandler;
import java.nio.channels.Channel;
import java.nio.charset.StandardCharsets;
public class ServerInputMessageHandler extends SimpleChannelInboundHandler<String> {
/**
* 当通道就绪 触发该方法
*
* @param ctx
* @throws Exception
*/
@Override
public void channelActive(ChannelHandlerContext ctx) {
}
/**
* 当通道有读取事件时 触发该方法
*
* @param ctx
* @param msg
* @throws Exception
*/
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) {
System.out.println(" 客户端发送的消息:" + msg);
}
/**
* 数据读取完毕 触发该方法
*
* @param ctx
* @throws Exception
*/
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
ctx.writeAndFlush("hello 客户端,我已接收到你发过来的信息...");
}
/**
* 发生异常 触发该方法
*
* @param ctx
* @param cause
* @throws Exception
*/
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
super.exceptionCaught(ctx, cause);
}
}
三、客户端
1、客户端
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.handler.codec.bytes.ByteArrayDecoder;
import io.netty.handler.codec.bytes.ByteArrayEncoder;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
public class NettyClient {
public static void main(String[] args) {
//客户端只需要一个事件循环组
EventLoopGroup eventLoopGroup = null;
try {
eventLoopGroup = new NioEventLoopGroup();
//创建客户端启动对象
Bootstrap bootstrap = new Bootstrap();
//客户端启动对象配置
//设置线程组
bootstrap.group(eventLoopGroup)
//设置客户端通道的实现类
.channel(NioSocketChannel.class)
//给事件循环组设置对应的通道处理器
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel socketChannel){
//字符串解码器
socketChannel.pipeline().addLast("docode", new StringDecoder());
//字符串编码器
socketChannel.pipeline().addLast("encode", new StringEncoder());
//信息读取处理器
socketChannel.pipeline().addLast(new ClientInputMessageHandler());
}
});
System.out.println("客户端启动...");
//启动客户端去连接服务器端
ChannelFuture channelFuture = bootstrap.connect("127.0.0.1", 6666).sync();
//关闭通道进行监听
channelFuture.channel().closeFuture().sync();
} catch (Exception e) {
e.printStackTrace();
} finally {
eventLoopGroup.shutdownGracefully();
}
}
}
2、客户端信息处理器
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.channel.SimpleChannelInboundHandler;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
public class ClientInputMessageHandler extends SimpleChannelInboundHandler<String> {
/**
* 当通道就绪 触发该方法
*
* @param ctx
* @throws Exception
*/
@Override
public void channelActive(ChannelHandlerContext ctx) {
ctx.writeAndFlush("hello 服务端...");
}
/**
* 当通道有读取事件时 触发该方法
*
* @param ctx
* @param msg
* @throws Exception
*/
@Override
protected void channelRead0(ChannelHandlerContext ctx, String msg) throws Exception {
System.out.println("服务端发送的消息:" + msg);
}
/**
* 发生异常 触发该方法
*
* @param ctx
* @param cause
* @throws Exception
*/
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
super.exceptionCaught(ctx, cause);
}
}
四、运行截图
1、服务端
2、客户端
最后
以上就是无辜芝麻为你收集整理的Netty开发Netty开发的全部内容,希望文章能够帮你解决Netty开发Netty开发所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复