我是靠谱客的博主 无辜芝麻,最近开发中收集的这篇文章主要介绍Netty开发Netty开发,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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开发所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部