1.建立socket连接

public class CmdClient {private ClientBootstrap bootstrap;private ChannelFuture channelFuture;private Channel channel;private static final CmdClient client = new CmdClient(); //单例实现,用来取channelprivate CmdClient(){}public static CmdClient getInstance(){return client;}public Channel getChannel() {return channel;} public void setChannel(Channel channel) {this.channel = channel;} public ClientBootstrap getBootstrap() {return bootstrap;} public void setBootstrap(ClientBootstrap bootstrap) {this.bootstrap = bootstrap;} public ChannelFuture getChannelFuture() {return channelFuture;} public void setChannelFuture(ChannelFuture channelFuture) {this.channelFuture = channelFuture;} public int start(String ip,int port) {System.setProperty("java.net.preferIPv4Stack", "true");System.setProperty("java.net.preferIPv6Addresses", "false");bootstrap = new ClientBootstrap(new NioClientSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));bootstrap.setPipelineFactory(new CmdPipelineFactory());bootstrap.setOption("tcpNoDelay", true);bootstrap.setOption("keepAlive", true);channelFuture = bootstrap.connect(new InetSocketAddress(ip, port));channelFuture.awaitUninterruptibly();channel = channelFuture.awaitUninterruptibly().getChannel();return 1;} public void stop() {channelFuture.awaitUninterruptibly();if (!channelFuture.isSuccess()) {channelFuture.getCause().printStackTrace();}channelFuture.getChannel().getCloseFuture().awaitUninterruptibly();bootstrap.releaseExternalResources();}

2.CmdPipelineFactory:

public class CmdPipelineFactory implements ChannelPipelineFactory {@Overridepublic ChannelPipeline getPipeline() throws Exception {ChannelPipeline pipeline = Channels.pipeline();pipeline.addLast("cmdDecoder", new CmdDecoder());pipeline.addLast("handler", new CmdClientHandler());return pipeline;}}

3.引入CmdDecoder用来解析协议

public class CmdDecoder extends FrameDecoder {@Overrideprotected Object decode(ChannelHandlerContext ctx, Channel channel,        ChannelBuffer buffer) throws Exception {    if (buffer.readableBytes() < 1) {        return null;    }    buffer.markReaderIndex();    ChannelBuffer magicBuff = buffer.readBytes(1);    int magic = DataConvert.byteArrayToSignedInt(magicBuff            .array());    if (magic == 0x77) {        if (buffer.readableBytes() < 19) {            return null;        }        buffer.markReaderIndex();        ChannelBuffer lenBuff = buffer.readBytes(19);        PacketParse parse = new PacketParse(null);        byte[] lenByte = parse.getPackForTwoByte(lenBuff.array(), 17, 2);        int len = DataConvert.byteArrayToSignedInt(lenByte);        if (buffer.readableBytes() < len) {            buffer.resetReaderIndex();            return null;        }        ChannelBuffer frame = buffer.readBytes(len);        return frame;    }    buffer.clear();    return null;}

更多相关文章

  1. android WebSocketClient和TCP协议Socket
  2. Android使用http协议与服务器通信
  3. android sip协议通话实现
  4. 转: Android基于HLS和RTMP协议的第三方SDK选择
  5. Android之网络请求1————HTTP协议
  6. android + PHP 实现消息推送(采用MQTT协议)
  7. android:注册时的协议---》方法一:弹出框
  8. Android与服务器端数据交互(基于SOAP协议整合android+webservice)
  9. android 客户端 smtp 协议发送数据

随机推荐

  1. android屏幕截图
  2. android json
  3. android 网络状态判断
  4. Android实现引导页并滑动跳转到主界面
  5. Android(安卓)Material Design(7) 转场动
  6. More about keeping Android’s screen a
  7. eclipse运行android时Console最后提示Don
  8. android 代码 退出程序
  9. Android实现弹出Toast提示
  10. Android(安卓)ViewPager循环左右自动滑动