• 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());就好了。

  • 相关阅读:
    Python前言之Markdown使用
    Linux压缩命令
    ubuntu安装nodejs
    linux搭建nginx流服务器,OBS推流,VCL拉流播放
    nginx配置文件
    控制语句
    鼠标用户和键盘用户
    if else
    cookie自封装对象
    C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表
  • 原文地址:https://www.cnblogs.com/TravisGrady/p/9337418.html
Copyright © 2020-2023  润新知