netty入门学习(3)-客户端写消息,服务端应答

来源:互联网 发布:语音网络系统怎么注册 编辑:程序博客网 时间:2024/05/13 13:16

一:服务端

import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.charset.Charset;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ServerBootstrap;import org.jboss.netty.buffer.ChannelBuffer;import org.jboss.netty.buffer.ChannelBuffers;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.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;public class NioServer {public static void main(String args[]){//Server服务启动器ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));//设置处理客户端消息和各种消息事件的类(Handler)bootstrap.setPipelineFactory(new ChannelPipelineFactory(){@Overridepublic ChannelPipeline getPipeline() throws Exception {return Channels.pipeline(new BusinessHandler());}});//绑定8000端口供客户端访问bootstrap.bind(new InetSocketAddress(8000));}private static class BusinessHandler extends SimpleChannelHandler{@Override        public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {        ChannelBuffer buffer = (ChannelBuffer)e.getMessage();        System.out.println("Receive:"+buffer.toString(Charset.defaultCharset()));        String msg = buffer.toString(Charset.defaultCharset()) + "has been processed!";        ChannelBuffer buffer2 = ChannelBuffers.buffer(msg.length());        buffer2.writeBytes(msg.getBytes());        e.getChannel().write(buffer2);        }}}

二:客户端

import java.net.InetSocketAddress;import java.nio.ByteBuffer;import java.nio.charset.Charset;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ClientBootstrap;import org.jboss.netty.buffer.ChannelBuffer;import org.jboss.netty.buffer.ChannelBuffers;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.Channels;import org.jboss.netty.channel.MessageEvent;import org.jboss.netty.channel.SimpleChannelHandler;import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;public class NioClient {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 RequestHandler());            }        });        // 连接到本地的8000端口的服务端        ChannelFuture future = bootstrap.connect(new InetSocketAddress(                "127.0.0.1", 8000));        try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}if(future.isSuccess()){ChannelBuffer buffer = ChannelBuffers.buffer("Request001".length());        buffer.writeBytes("Request001".getBytes());future.getChannel().write(buffer);}}private static class RequestHandler extends SimpleChannelHandler {         @Override        public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {        ChannelBuffer buffer = (ChannelBuffer)e.getMessage();        System.out.println(buffer.toString(Charset.defaultCharset()));        }    }}


原创粉丝点击