1. 程式人生 > >zbb20180930 java-io-nio-netty 代碼例子

zbb20180930 java-io-nio-netty 代碼例子

bootstra boot close bin handlers line star 工程 tee

maven
<dependency> <groupId>io.netty</groupId> <artifactId>netty</artifactId> <version>3.3.0.Final</version> </dependency>
TestNettyServer
package com.zbb.test.netty; import java.net.InetSocketAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelHandler; import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory; import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; public class TestNettyServer { public static void main(String[] args) { // TODO Auto-generated method stub // 創建netty server ServerBootstrap serverBootstrap = new ServerBootstrap(); // 創建 兩個線程池 ExecutorService pool1 = Executors.newCachedThreadPool(); ExecutorService pool2 = Executors.newCachedThreadPool(); // 創建線程工程 serverBootstrap.setFactory(new NioServerSocketChannelFactory(pool1, pool2)); // 創建管道工廠 serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = org.jboss.netty.channel.Channels.pipeline(); pipeline.addLast("encode", new StringEncoder()); pipeline.addLast("decode", new StringDecoder()); pipeline.addLast("serverHandler", new ZbbNettyHandlerServer()); // TODO Auto-generated method stub return pipeline; } }); //綁定端口 Channel bind = serverBootstrap.bind(new InetSocketAddress(8080)); System.out.println("server start ..."); } } class ZbbNettyHandlerServer extends SimpleChannelHandler { @Override public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { // TODO Auto-generated method stub super.channelClosed(ctx, e); System.out.println("channelClosed"); } @Override public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { // TODO Auto-generated method stub super.channelDisconnected(ctx, e); System.out.println("channelDisconnected"); } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { // TODO Auto-generated method stub super.exceptionCaught(ctx, e); System.out.println("exceptionCaught"); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { // TODO Auto-generated method stub super.messageReceived(ctx, e); System.out.println("messageReceived"); System.out.println("server received client message:" + e.getMessage()); Channel channel = ctx.getChannel(); channel.write("ok..."); } }
TestNettyClient
package com.zbb.test.netty; import java.net.InetSocketAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import org.jboss.netty.bootstrap.ClientBootstrap; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFuture; import org.jboss.netty.channel.ChannelHandlerContext; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.ChannelStateEvent; import org.jboss.netty.channel.ExceptionEvent; import org.jboss.netty.channel.MessageEvent; import org.jboss.netty.channel.SimpleChannelHandler; import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory; import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; public class TestNettyClient { public static void main(String[] args) { // 創建netty client ClientBootstrap clientBootstrap = new ClientBootstrap(); // 創建 兩個線程池 ExecutorService pool1 = Executors.newCachedThreadPool(); ExecutorService pool2 = Executors.newCachedThreadPool(); // 創建線程工程 clientBootstrap.setFactory(new NioClientSocketChannelFactory(pool1, pool2)); // 創建管道工廠 clientBootstrap.setPipelineFactory(new ChannelPipelineFactory() { public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = org.jboss.netty.channel.Channels.pipeline(); pipeline.addLast("encode", new StringEncoder()); pipeline.addLast("decode", new StringDecoder()); pipeline.addLast("clientHandler", new ZbbNettyHandlerClient()); // TODO Auto-generated method stub return pipeline; } }); // 綁定端口 ChannelFuture connect = clientBootstrap.connect(new InetSocketAddress("127.0.0.1", 8080)); System.out.println("client start ..."); Channel channel = connect.getChannel(); channel.write("aaaaaaaaaa"); } } class ZbbNettyHandlerClient extends SimpleChannelHandler { @Override public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { // TODO Auto-generated method stub super.channelClosed(ctx, e); System.out.println("channelClosed"); } @Override public void channelDisconnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { // TODO Auto-generated method stub super.channelDisconnected(ctx, e); System.out.println("channelDisconnected"); } @Override public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) throws Exception { // TODO Auto-generated method stub super.exceptionCaught(ctx, e); System.out.println("exceptionCaught"); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { // TODO Auto-generated method stub super.messageReceived(ctx, e); System.out.println("messageReceived"); System.out.println("client received server message:" + e.getMessage()); } }

zbb20180930 java-io-nio-netty 代碼例子