博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty3的入门案例
阅读量:6817 次
发布时间:2019-06-26

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

Netty3服务端的代码

Server.java

public class Server {
    public static void main(String[] args) {
        //服务类         ServerBootstrap  serverBootstrap = new  ServerBootstrap();         //boss线程监听端口,worker线程负责数据读写         ExecutorService boss = Executors.newCachedThreadPool();         ExecutorService worker = Executors.newCachedThreadPool();         //设置niosocket工厂         serverBootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker));         //设置管道的工厂         serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() {
                         @Override             public ChannelPipeline getPipeline() throws Exception {
                ChannelPipeline pipeLine = Channels.pipeline();                 pipeLine.addLast("decoder", new StringDecoder());                 pipeLine.addLast("encoder", new StringEncoder());                 pipeLine.addLast("helloHandle", new HelloHandle());                 return pipeLine;             }         });         serverBootstrap.bind(new InetSocketAddress(10102));         System.out.println("start!!!");     } }复制代码

HelloHandle.java

  

public class HelloHandle extends SimpleChannelHandler{
         /**      * 接收消息      */     @Override     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        System.out.println("messageReceived");         String s = (String) e.getMessage();         System.out.println(s);                  //回写数据         ctx.getChannel().write("hi");         super.messageReceived(ctx, e);     }     /**      * 捕获异常      */     @Override     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
        System.out.println("exceptionCaught");         super.exceptionCaught(ctx, e);     }     /**      * 新连接      */     @Override     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        System.out.println("channelConnected");         super.channelConnected(ctx, e);     }     /**      * 必须是链接已经建立,关闭通道的时候才会触发      */     @Override     public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        System.out.println("channelDisconnected");         super.channelDisconnected(ctx, e);     }     /**      * channel关闭的时候触发      */     @Override     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        System.out.println("channelClosed");         super.channelClosed(ctx, e);     }      }复制代码
Netty3客户端代码

Client.java

public class Client {
    public static void main(String[] args) {
        //客户端类         ClientBootstrap strap = new ClientBootstrap();         ExecutorService boss = Executors.newCachedThreadPool();         ExecutorService worker =Executors.newCachedThreadPool();         //设置niosocket工厂         strap.setFactory(new NioClientSocketChannelFactory(boss,worker));         //设置管道的工厂         strap.setPipelineFactory(new ChannelPipelineFactory() {
                         @Override             public ChannelPipeline getPipeline() throws Exception {
                ChannelPipeline pipeLine = Channels.pipeline();                 pipeLine.addLast("decoder", new StringDecoder());                 pipeLine.addLast("encoder", new StringEncoder());                 pipeLine.addLast("hiHandle", new HiHandle());                 return pipeLine;                 }             });         //连接服务端         ChannelFuture connect = strap.connect(new InetSocketAddress("127.0.0.1",10102));         Channel channel = connect.getChannel();         System.out.println("client start");         Scanner scanner = new Scanner(System.in);         while(true){
           System.out.println("请输入");            channel.write(scanner.next());         }       }      }复制代码
HiHandle.java       

public class HiHandle extends SimpleChannelHandler {
    /**      * 接收消息      */     @Override     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
        String s = (String) e.getMessage();         System.out.println(s);         super.messageReceived(ctx, e);     }     /**      * 捕获异常      */     @Override     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception {
        System.out.println("exceptionCaught");         super.exceptionCaught(ctx, e);     }     /**      * 新连接      */     @Override     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        System.out.println("channelConnected");         super.channelConnected(ctx, e);     }     /**      * 必须是链接已经建立,关闭通道的时候才会触发      */     @Override     public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        System.out.println("channelDisconnected");         super.channelDisconnected(ctx, e);     }     /**      * channel关闭的时候触发      */     @Override     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception {
        System.out.println("channelClosed");         super.channelClosed(ctx, e);     } }复制代码
开始测试

1.启动服务端:

2.启动客户端:(并输入信息)

3.回看服务端

关注51码农网,寻找一起进步的同学。

51码农网  程序员社群学习打卡集聚地

关注51码农网官方微信公众号:

转载于:https://juejin.im/post/5c90f6c86fb9a070eb26717a

你可能感兴趣的文章
CISCO引擎RPR SSO
查看>>
LINUX APACHE 安装测试
查看>>
Java导致登录UCS Manager异常
查看>>
HTTP协议
查看>>
Win10怎么改Host文件?Win10编辑host文件方法(无视权限)
查看>>
sql convert and cast
查看>>
我的NodeJS一年之旅总结
查看>>
MyBatis-3.4.2-源码分析6:解析XML之objectWrapperFactoryElement & reflectorFactoryElement
查看>>
javascript与获取鼠标位置有关的属性
查看>>
Oracle database 11.2.0.3.0 升级至 11.2.0.3.14
查看>>
heartbeat理论介绍
查看>>
简单实现MVC模式
查看>>
mysql连接小错误一例
查看>>
奇怪的“考生”:中美高考,我都考一考!
查看>>
winform datagridview 使用论坛。
查看>>
Cocos Studio study ---------- 使用CocosStudio1.6制作 界面,并结合代码制作游戏
查看>>
关于LittleSis网站数据API的简单整理
查看>>
虚函数的实现
查看>>
【原】Oracle 数据库实例启动过程
查看>>
上传文件和导出的测试用例设计
查看>>