Netty3.0+ server & client Demo(一)

来源:互联网 发布:获取网页局部源码 编辑:程序博客网 时间:2024/05/22 03:03

学习netty之前,请先学习几个nio小知识,可以跟着小Demo去悄悄看看。

先上Netty3.0+的服务端

package Demo1;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.ChannelPipeline;import org.jboss.netty.channel.ChannelPipelineFactory;import org.jboss.netty.channel.Channels;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 NettyServer {/** * @param args */public static void main(String[] args) {ServerBootstrap bootstrap = new ServerBootstrap();ExecutorService boss = Executors.newCachedThreadPool();ExecutorService worker = Executors.newCachedThreadPool();bootstrap.setFactory(new NioServerSocketChannelFactory(boss, worker));bootstrap.setPipelineFactory(new ChannelPipelineFactory() {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline pipeline = Channels.pipeline();pipeline.addLast("decoder", new StringDecoder());pipeline.addLast("encoder", new StringEncoder());pipeline.addLast("helloHandler", new HelloHandler());return pipeline;}});bootstrap.bind(new InetSocketAddress(10100));}}

package Demo1;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.ChannelStateEvent;import org.jboss.netty.channel.ExceptionEvent;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;public class HelloHandler extends SimpleChannelHandler{/** * 新连接关闭 */@Overridepublic void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelClosed(ctx, e);}/** * 新连接 */@Overridepublic void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelConnected(ctx, e);}/** * 断开连接 */@Overridepublic void channelDisconnected(ChannelHandlerContext ctx,ChannelStateEvent e) throws Exception {// TODO Auto-generated method stubsuper.channelDisconnected(ctx, e);}/** * 连接出现了异常 */@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)throws Exception {// TODO Auto-generated method stubsuper.exceptionCaught(ctx, e);}/** * 消息处理 */@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {// TODO Auto-generated method stubString msg = (String) e.getMessage();System.out.println("server msg:"+msg);ctx.getChannel().write("hello,client!");super.messageReceived(ctx, e);}}
接着客户端

package Demo2;import java.net.InetSocketAddress;import java.util.concurrent.Executor;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.ChannelPipeline;import org.jboss.netty.channel.ChannelPipelineFactory;import org.jboss.netty.channel.Channels;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 NettyClient {/** * @param args */public static void main(String[] args) {ClientBootstrap bootstrap = new ClientBootstrap();Executor boss = Executors.newCachedThreadPool();Executor worker = Executors.newCachedThreadPool();bootstrap.setFactory(new NioClientSocketChannelFactory(boss, worker));bootstrap.setPipelineFactory(new ChannelPipelineFactory() {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline pipeline = Channels.pipeline();pipeline.addLast("decoder", new StringDecoder());pipeline.addLast("encoder", new StringEncoder());pipeline.addLast("hiHandler", new HiHandler());return pipeline;}});ChannelFuture connect = bootstrap.connect(new InetSocketAddress("127.0.0.1",10100));Channel channel = connect.getChannel();channel.write("send client datas");}}
package Demo2;import org.jboss.netty.channel.ChannelHandlerContext;import org.jboss.netty.channel.ChannelStateEvent;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;public class HiHandler extends SimpleChannelHandler {@Overridepublic void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelClosed(ctx, e);}@Overridepublic void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {// TODO Auto-generated method stubsuper.channelConnected(ctx, e);}@Overridepublic void channelDisconnected(ChannelHandlerContext ctx,ChannelStateEvent e) throws Exception {// TODO Auto-generated method stubsuper.channelDisconnected(ctx, e);}@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {// TODO Auto-generated method stubString msg = (String) e.getMessage();System.out.println("client msg:"+msg);super.messageReceived(ctx, e);}}

这两个例子并没有太多新的东西,就是官网一个简单的helloworld而已!

原创粉丝点击