Nett初步使用

来源:互联网 发布:网络聊天软件有哪些 编辑:程序博客网 时间:2024/05/29 12:37
import java.net.InetSocketAddress;import java.util.concurrent.Executors;import org.jboss.netty.bootstrap.ClientBootstrap;import org.jboss.netty.bootstrap.ServerBootstrap;import org.jboss.netty.channel.Channel;import org.jboss.netty.channel.ChannelFuture;import org.jboss.netty.channel.ChannelFutureListener;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.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.channel.socket.nio.NioServerSocketChannelFactory;import org.jboss.netty.handler.codec.string.StringDecoder;import org.jboss.netty.handler.codec.string.StringEncoder;public class TestCase {public static void testServer(){ServerBootstrap serverBootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));serverBootstrap.setPipelineFactory(new ChannelPipelineFactory() {public ChannelPipeline getPipeline() throws Exception {ChannelPipeline channelPipleline = Channels.pipeline();channelPipleline.addLast("decoder", new StringDecoder());channelPipleline.addLast("encoder", new StringEncoder());channelPipleline.addLast("handler", new HelloServerHandler());return channelPipleline;}});serverBootstrap.bind(new InetSocketAddress(3333));}public static void testClient(){ClientBootstrap clientBootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool()));clientBootstrap.setPipelineFactory(new ChannelPipelineFactory() {public ChannelPipeline getPipeline() throws Exception {ChannelPipeline channelPipleline = Channels.pipeline();channelPipleline.addLast("decoder", new StringDecoder());channelPipleline.addLast("encoder", new StringEncoder());channelPipleline.addLast("handler", new HelloClientHandler());return channelPipleline;}});ChannelFuture future = clientBootstrap.connect(new InetSocketAddress("localhost", 3333));future.addListener(new ChannelFutureListener() {public void operationComplete(ChannelFuture arg0) throws Exception {System.out.println("establish connected.");}});future.getChannel().getCloseFuture().awaitUninterruptibly();clientBootstrap.releaseExternalResources();System.out.println("Client over!");}public static void main(String[] args) {testServer();testClient();}}class HelloServerHandler extends SimpleChannelHandler{@Overridepublic void messageReceived(ChannelHandlerContext ctx, MessageEvent e)throws Exception {String strMsg = (String) e.getMessage();System.out.println(strMsg);}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)throws Exception {System.out.println(e.getCause());e.getChannel().close();}}class HelloClientHandler extends SimpleChannelHandler{@Overridepublic void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e)throws Exception {String strMsg = null;for(int i = 0; true; i++){strMsg = "hello" + i;e.getChannel().write(strMsg);Thread.sleep(1000);}}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)throws Exception {System.out.println(e.getCause());e.getChannel().close();}}


 

0 0