博客
关于我
netty服务器,客户端初体验
阅读量:174 次
发布时间:2019-02-28

本文共 4229 字,大约阅读时间需要 14 分钟。

一、引入依赖

在项目中首先需要配置所需的依赖包。Netty作为依赖包需要手动添加,建议访问Maven仓库获取最新版本。以下是常用的依赖配置:

io.netty
netty-all
4.1.25.Final
org.projectlombok
lombok
1.16.22

二、服务器端实现

完成依赖配置后,接下来编写服务器端代码。以下是一个简单的Netty服务器实现:

public class LiuServer {
private final int port;
public LiuServer(int port) {
this.port = port;
}
public static void main(String[] args) throws Exception {
int port = 8888;
new LiuServer(port).start();
}
public void start() throws Exception {
EventLoopGroup bossGroup = new NioEventLoopGroup(1);
EventLoopGroup workerGroup = new NioEventLoopGroup();
try {
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.localAddress(new InetSocketAddress(port))
.childHandler(new ChannelInitializer
() {
@Override
public void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new LiuServerHandler());
}
});
ChannelFuture f = b.bind().sync();
System.out.println(LiuServer.class.getName() + " 服务启动开始监听端口:" + f.channel().localAddress());
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
}
//服务器处理类
@ChannelHandler.Sharable
public class LiuServerHandler extends ChannelInboundHandlerAdapter {
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
ByteBuf in = (ByteBuf) msg;
System.out.println("客户端发来消息: " + in.toString(CharsetUtil.UTF_8));
ctx.write(in);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
System.out.println("channel 通道读取完成");
ctx.writeAndFlush(Unpooled.EMPTY_BUFFER).addListener(ChannelFutureListener.CLOSE);
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
}

三、客户端实现

客户端需要连接到服务器,以下是一个简单的Netty客户端实现:

public class LiuClient {
private final String host;
private final int port;
public LiuClient(String host, int port) {
this.host = host;
this.port = port;
}
public static void main(String[] args) throws Exception {
final String host = "127.0.0.1";
final int port = 8888;
new LiuClient(host, port).start();
}
public void start() throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap b = new Bootstrap();
b.group(group)
.channel(NioSocketChannel.class)
.remoteAddress(new InetSocketAddress(host, port))
.handler(new ChannelInitializer
() {
@Override
public void initChannel(SocketChannel ch) {
ch.pipeline().addLast(new LiuClientHandler());
}
});
ChannelFuture f = b.connect().sync();
f.channel().closeFuture().sync();
} finally {
group.shutdownGracefully();
}
}
}
//客户端处理类
@ChannelHandler.Sharable
public class LiuClientHandler extends SimpleChannelInboundHandler
{
@Override
public void channelActive(ChannelHandlerContext ctx) {
ctx.writeAndFlush(Unpooled.copiedBuffer("Hello Netty! " + Long.toString(System.currentTimeMillis()), CharsetUtil.UTF_8));
}
@Override
public void channelRead0(ChannelHandlerContext ctx, ByteBuf in) {
System.out.println("服务器发来消息: " + in.toString(CharsetUtil.UTF_8));
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
}

以上代码提供了一个完整的Netty服务器端和客户端实现,适用于基础的网络通信应用开发。

转载地址:http://mton.baihongyu.com/

你可能感兴趣的文章
NLP度量指标BELU真的完美么?
查看>>
NLP的不同研究领域和最新发展的概述
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
nmap 使用方法详细介绍
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
nmap指纹识别要点以及又快又准之方法
查看>>
Nmap渗透测试指南之指纹识别与探测、伺机而动
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.7 Parameters vs Hyperparameters
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>