码迷,mamicode.com
首页 > Web开发 > 详细

Netty传递字符串

时间:2018-07-19 19:16:19      阅读:544      评论:0      收藏:0      [点我收藏+]

标签:client   span   ali   syn   []   style   util   new   string   

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

Netty传递字符串

标签:client   span   ali   syn   []   style   util   new   string   

原文地址:https://www.cnblogs.com/TravisGrady/p/9337418.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!