netty: 以默認的ByteBuf作為傳輸數據


client部分代碼:

//線程
		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部分代碼:

@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:

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代碼:

需要繼承:ChannelHandlerAdapter這個類

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代碼:

需要繼承:ChannelHandlerAdapter 類

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();
	}

	

	
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM