zoukankan      html  css  js  c++  java
  • Netty传递字符串

    想在Netty的channel中传递字符串,需要在客户端Client设置sc.pipeline().addLast(new StringEncoder());服务端Server设置sc.pipeline().addLast(new StringDecoder());就可以了;

    客户端代码:

    package com.netty.client;
    
    import io.netty.bootstrap.Bootstrap;
    import io.netty.buffer.Unpooled;
    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.string.StringDecoder;
    import io.netty.handler.codec.string.StringEncoder;
    
    public class Client {
    
    	public static void main(String[] args) throws InterruptedException {
    		EventLoopGroup workgroup = new NioEventLoopGroup();
    		
    		Bootstrap b = new Bootstrap();
    		b.group(workgroup);
    		b.channel(NioSocketChannel.class);
    		b.handler(new ChannelInitializer<SocketChannel>() {
    
    			@Override
    			protected void initChannel(SocketChannel sc) throws Exception {
    				sc.pipeline().addLast(new StringEncoder());
    				sc.pipeline().addLast(new ClientHandler());
    			}
    			
    		});
    		ChannelFuture future = b.connect("127.0.0.1", 8080).sync();
    		future.channel().writeAndFlush("asda");
    		
    		future.channel().closeFuture().sync();
    		
    		workgroup.shutdownGracefully();
    	}
    }
    

      服务端代码:

    package com.netty.server;
    
    import io.netty.bootstrap.ServerBootstrap;
    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.NioServerSocketChannel;
    import io.netty.handler.codec.string.StringDecoder;
    import io.netty.handler.logging.LogLevel;
    import io.netty.handler.logging.LoggingHandler;
    
    public class Server {
    
    	public static void main(String[] args) throws InterruptedException {
    		EventLoopGroup bossgroup = new NioEventLoopGroup();
    		EventLoopGroup workgroup = new NioEventLoopGroup();
    		
    		ServerBootstrap sb = new ServerBootstrap();
    		sb.channel(NioServerSocketChannel.class);
    		sb.group(bossgroup,workgroup);
    		sb.handler(new LoggingHandler(LogLevel.INFO));
    		sb.childHandler(new ChannelInitializer<SocketChannel>() {
    
    			@Override
    			protected void initChannel(SocketChannel sc) throws Exception {
    				sc.pipeline().addLast(new StringDecoder());
    				sc.pipeline().addLast(new ServerHandler());
    			}
    		});
    		
    		ChannelFuture future = sb.bind(8080).sync();
    		future.channel().closeFuture().sync();
    		workgroup.shutdownGracefully();
    		bossgroup.shutdownGracefully();
    	}
    }
    

      

    package com.netty.server;
    
    import java.nio.charset.Charset;
    
    import io.netty.buffer.ByteBuf;
    import io.netty.channel.ChannelHandlerAdapter;
    import io.netty.channel.ChannelHandlerContext;
    import io.netty.util.CharsetUtil;
    import io.netty.util.ReferenceCountUtil;
    
    public class ServerHandler extends ChannelHandlerAdapter {
    
        @Override
        public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
            try {
            //这里可以直接获取str String str
    = (String)msg; System.out.println(str); } finally { ReferenceCountUtil.release(msg); } } @Override public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception { } }

    那么如果服务端要给客户端也返回String类型的,只需要在服务端和客户端都加上sc.pipeline().addLast(new StringEncoder());sc.pipeline().addLast(new StringDecoder());就好了。

  • 相关阅读:
    阿里中间件——消息中间件Notify和MetaQ
    大型网站架构系列:分布式消息队列
    Mycat
    spring集成mybatis实现mysql读写分离
    mysql5.7.18的安装与主从复制
    NuGet学习笔记(3) 搭建属于自己的NuGet服务器
    NuGet学习笔记(1)——初识NuGet及快速安装使用
    Android 中使用 html 作布局文件
    获取WebView加载HTML时网页中的内容
    android学习——popupWindow 在指定位置上的显示
  • 原文地址:https://www.cnblogs.com/TravisGrady/p/9337418.html
Copyright © 2011-2022 走看看