netty的学习笔记一

netty的笔记

netty入门demo

netty服务端的代码
import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class Server {
public static void main(String[] args) throws Exception {

  EventLoopGroup bossGroup  =new NioEventLoopGroup();
  EventLoopGroup workGroup  =new NioEventLoopGroup();

  ServerBootstrap bootstrap=new ServerBootstrap();

  bootstrap.group(bossGroup, workGroup);
  bootstrap.channel(NioServerSocketChannel.class);
  bootstrap.option(ChannelOption.SO_BACKLOG, 128)
  .option(ChannelOption.SO_SNDBUF, 32*1024) //设置发送缓冲大小
  .option(ChannelOption.SO_RCVBUF, 32*1024)
  .childOption(ChannelOption.SO_KEEPALIVE, true)
  .childHandler(new ChannelInitializer<SocketChannel>() {

    protected void initChannel(SocketChannel sc) throws Exception {
        sc.pipeline().addLast(new ServerHandler());
    }
   });
  ChannelFuture cf=bootstrap.bind(9876).sync();
  cf.channel().closeFuture().sync();
  bossGroup.shutdownGracefully();
  workGroup.shutdownGracefully();

}
}

netty服务端的handler
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.ReferenceCountUtil;

public class ServerHandler extends ChannelHandlerAdapter {

public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
   try{
        ByteBuf buf=(ByteBuf)msg;
        byte[] bytes=new byte[buf.readableBytes()];
        buf.readBytes(bytes);
        String req=new String(bytes);
        System.out.println("客户端口数据"+req);
        ctx.writeAndFlush(Unpooled.copiedBuffer(req.getBytes()));

    }finally {
        ReferenceCountUtil.release(msg);
    }
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    ctx.close();
}

netty 客户端的代码
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;

public class Client {
public static void main(String[] args) throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
Bootstrap bootstrap=new Bootstrap();
bootstrap.group(group)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer() {
@Override
protected void initChannel(SocketChannel sc) throws Exception {
sc.pipeline().addLast(new ClientHandler());
}
});

   ChannelFuture cf=bootstrap.connect("127.0.0.1",9876).sync();
   cf.channel().writeAndFlush(Unpooled.copiedBuffer("111111111111".getBytes()));
   cf.channel().closeFuture().sync();
   group.shutdownGracefully();

}

}

netty 客户端的handler
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerAdapter;
import io.netty.channel.ChannelHandlerContext;
import io.netty.util.ReferenceCountUtil;

public class ClientHandler extends ChannelHandlerAdapter{

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    try{
        ByteBuf buf=(ByteBuf)msg;
        byte[] buffer=new byte[buf.readableBytes()];
        buf.readBytes(buffer);
        String message=new String(buffer);
        System.out.println(message);
    }finally {
        ReferenceCountUtil.release(msg);
    }
}

@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    ctx.close();
}

}

猜你喜欢

转载自blog.csdn.net/u013127325/article/details/73608844