netty: 以默認的ByteBuf做爲傳輸數據

client部分代碼:ide

//線程
		EventLoopGroup worker = new NioEventLoopGroup();
		//輔助類
		Bootstrap b = new Bootstrap();
		//註冊server
		b.group(worker)
		.channel(NioSocketChannel.class)
		.handler(new ChannelInitializer<SocketChannel>() {

			@Override
			protected void initChannel(SocketChannel sc) throws Exception {
				// TODO Auto-generated method stub
				sc.pipeline().addLast(new ClientHandler());
			}
		});

  

clientHandler部分代碼:oop

@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		// TODO Auto-generated method stub
		try {
			ByteBuf buf = (ByteBuf)msg;
			byte[] bytes = new byte[buf.readableBytes()];
			buf.readBytes(bytes);
			String result = new String(bytes, "utf-8");
			System.out.println("Server: " + result);
		}finally {
			ReferenceCountUtil.release(msg);
		}
		
	}

  

 

 

下面查看完整代碼 :線程

client:netty

public static void main(String[] args) throws InterruptedException {
		
		//線程
		EventLoopGroup worker = new NioEventLoopGroup();
		//輔助類
		Bootstrap b = new Bootstrap();
		//註冊server
		b.group(worker)
		.channel(NioSocketChannel.class)
		.handler(new ChannelInitializer<SocketChannel>() {

			@Override
			protected void initChannel(SocketChannel sc) throws Exception {
				// TODO Auto-generated method stub
                               //不作任何處理,ByteBuf格式傳輸
				sc.pipeline().addLast(new ClientHandler());
			}
		});
		
		ChannelFuture cf = b.connect("127.0.0.1", 8765).sync();
		
		cf.channel().writeAndFlush(Unpooled.copiedBuffer("hello netty!!".getBytes()));
//		Thread.sleep(1000);
//		cf.channel().writeAndFlush(Unpooled.copiedBuffer("hello netty!!".getBytes()));
//		Thread.sleep(1000);
//		cf.channel().writeAndFlush(Unpooled.copiedBuffer("hello netty!!".getBytes()));
		//發送完畢,斷開鏈接
		cf.addListener(ChannelFutureListener.CLOSE);
		
		cf.channel().closeFuture().sync();
		worker.shutdownGracefully();
		
	}
	

  

 

clientHandler代碼:server

須要繼承:ChannelHandlerAdapter這個類blog

public class ClientHandler extends ChannelHandlerAdapter {

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		// TODO Auto-generated method stub
		try {

                        //原始ByteBuf數據格式處理
			ByteBuf buf = (ByteBuf)msg;
			byte[] bytes = new byte[buf.readableBytes()];
			buf.readBytes(bytes);
			String result = new String(bytes, "utf-8");
			System.out.println("Server: " + result);
		}finally {

                       //接收處理完後,丟棄
			ReferenceCountUtil.release(msg);
		}
		
	}

	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		// TODO Auto-generated method stub
		cause.printStackTrace();
		ctx.close();
	}

	
}    

  

 

Server代碼:繼承

public static void main(String[] args) throws InterruptedException {
		
		//第一個線程鏈接client端
		EventLoopGroup boss = new NioEventLoopGroup();
		//第二個線程處理邏輯
		EventLoopGroup worker = new NioEventLoopGroup();
		//輔助類,註冊 server
		ServerBootstrap b = new ServerBootstrap();
		b.group(boss, worker)
		.channel(NioServerSocketChannel.class)
		.childHandler(new ChannelInitializer<SocketChannel>() {

			@Override
			protected void initChannel(SocketChannel sc) throws Exception {
				// TODO Auto-generated method stub
				sc.pipeline().addLast(new ServerHandler());
			}
		});
		
		//綁定指定的端口方便監聽
		ChannelFuture cf = b.bind(8765).sync();
		cf.channel().closeFuture().sync();
		
		boss.shutdownGracefully();
		worker.shutdownGracefully();
		
	}

  

 

serverHandler代碼:ip

須要繼承:ChannelHandlerAdapter 類utf-8

public class ServerHandler extends ChannelHandlerAdapter {

	@Override
	public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
		// TODO Auto-generated method stub
		ByteBuf buf = (ByteBuf)msg;
		byte[] bs = new byte[buf.readableBytes()];
		buf.readBytes(bs);
		String result = new String(bs, "utf-8");
		System.out.println("Client: " + result);
		
		String response = "888888";
		ctx.writeAndFlush(Unpooled.copiedBuffer(response.getBytes()));
		//.addListener(ChannelFutureListener.CLOSE);
		
	}

	@Override
	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
		// TODO Auto-generated method stub
		cause.printStackTrace();
		ctx.close();
	}

	

	
}
相關文章
相關標籤/搜索