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())); //發(fā)送完畢,斷開連接 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數(shù)據(jù)格式處理 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()); } }); //綁定指定的端口方便監(jiān)聽 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(); } }
? 來源:http://www./content-4-214951.html |
|