wsky / top-link

embedded duplex multi-channel endpoint and connection management for c#/java/...
6 stars 1 forks source link

add netcat cmd server impl #77

Closed wsky closed 11 years ago

wsky commented 11 years ago

RT

code by lishang

public class Sever {
     public static void main(String args[]) {  

         ServerBootstrap bootstrap = new ServerBootstrap(  
                    (ChannelFactory) new NioServerSocketChannelFactory(  
                            Executors.newCachedThreadPool(),  
                            Executors.newCachedThreadPool()));  

            bootstrap.setPipelineFactory(new ChannelPipelineFactory() {  

                @Override  

                public ChannelPipeline getPipeline() throws Exception {  

                    return Channels.pipeline(new TestServerHandler());  

                }  

            }); 

            bootstrap.bind(new InetSocketAddress(8000));  
        }  
     private static class TestServerHandler extends SimpleChannelHandler {  

            @Override  

            public void channelConnected(ChannelHandlerContext ctx,  

                    ChannelStateEvent e) {  
                System.out.println("This is a client connected!");  

            }

            @Override
            public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {  
                String message = ((ChannelBuffer) e.getMessage()).toString(Charset.defaultCharset());
                Channel client_ch = e.getChannel();
                if(message.toLowerCase().equals("disconnect"))
                {
                    ChannelBuffer buffer=ChannelBuffers.buffer(message.length());
                    buffer.writeBytes(message.getBytes());
                    e.getChannel().write(buffer);
                    client_ch.disconnect();
                    client_ch.close();
                }
                else
                {
                    CommandHandler handle=new CommandHandler(message);
                    String[] commands=handle.handler();
                    ChannelBuffer buffer=ChannelBuffers.buffer(LogicHandler.ImpCommand(commands).length());
                    buffer.writeBytes(LogicHandler.ImpCommand(commands).getBytes());
                    e.getChannel().write(buffer);
     //             client_ch.write(LogicHandler.ImpCommand(commands));
                }
            }  

        }  

}

usage:

echo "cmd"|nc $ip $port