首页 > 代码库 > Netty通讯框架样例

Netty通讯框架样例

首先到:http://netty.io/ 下载 netty-3.9.2.Final-dist.tar.bz2

建立一个Java工程:

二、编写样例

服务端:

package netty_test.test;import java.net.InetSocketAddress;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ServerBootstrap;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.Channels;import org.jboss.netty.channel.SimpleChannelHandler;import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;public class HelloServer {     public static void main(String args[]) {              // Server服务启动器              ServerBootstrap bootstrap = new ServerBootstrap(                      new NioServerSocketChannelFactory(                              Executors.newCachedThreadPool(),                              Executors.newCachedThreadPool()));              // 设置一个处理客户端消息和各种消息事件的类(Handler)              bootstrap                      .setPipelineFactory(new ChannelPipelineFactory() {                          @Override                          public ChannelPipeline getPipeline()                                  throws Exception {                              return Channels                                      .pipeline(new HelloServerHandler());                          }                      });              // 开放8000端口供客户端访问。              bootstrap.bind(new InetSocketAddress(8000));          }                private static class HelloServerHandler extends                  SimpleChannelHandler {                    /**              * 当有客户端绑定到服务端的时候触发,打印"Hello world, I‘m server."              *               * @alia OneCoder              * @author lihzh              */              @Override              public void channelConnected(                      ChannelHandlerContext ctx,                      ChannelStateEvent e) {                  System.out.println("Hello world, I‘m server.");              }          }  }
View Code

客户端:

package netty_test.test;import java.net.InetSocketAddress;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ClientBootstrap;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.Channels;import org.jboss.netty.channel.SimpleChannelHandler;import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;public class HelloClient {    public static void main(String args[]) {          // Client服务启动器          ClientBootstrap bootstrap = new ClientBootstrap(                  new NioClientSocketChannelFactory(                          Executors.newCachedThreadPool(),                          Executors.newCachedThreadPool()));          // 设置一个处理服务端消息和各种消息事件的类(Handler)          bootstrap.setPipelineFactory(new ChannelPipelineFactory() {              @Override              public ChannelPipeline getPipeline() throws Exception {                  return Channels.pipeline(new HelloClientHandler());              }          });          // 连接到本地的8000端口的服务端          bootstrap.connect(new InetSocketAddress(                  "127.0.0.1", 8000));      }        private static class HelloClientHandler extends SimpleChannelHandler {              /**          * 当绑定到服务端的时候触发,打印"Hello world, I‘m client."          *           * @alia OneCoder          * @author lihzh          */          @Override          public void channelConnected(ChannelHandlerContext ctx,                  ChannelStateEvent e) {              System.out.println("Hello world, I‘m client.");          }      }  }
View Code