`
fokman
  • 浏览: 241084 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

在android中使用netty框架通信

 
阅读更多

    最近在做一个项目,基于android版本的一个物联网应用,涉及到了关于socket通信方面的内容,在google上搜了一下,发现Netty框架可以快速的实现socket通信。而且使用起来十分方便。

1.建立socket连接

public class CmdClient {
	private ClientBootstrap bootstrap;
	private ChannelFuture channelFuture;
	private Channel channel;
	private static final CmdClient client = new CmdClient(); //单例实现,用来取channel
	private 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 {
	@Override
	public ChannelPipeline getPipeline() throws Exception {
		ChannelPipeline pipeline = Channels.pipeline();
		pipeline.addLast("cmdDecoder", new CmdDecoder());
		pipeline.addLast("handler", new CmdClientHandler());
		return pipeline;
	}
	
}

 3.netty使用的是filter方式实现packet解析,这边我加入了一个CmdDecoder用来解析协议包头

public class CmdDecoder extends FrameDecoder {

    @Override
    protected 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 楼 maotou1988 2016-05-18  
android基于netty的发送图片与文字demo,楼主共勉
http://lison.cc/508.html

相关推荐

    Android基于Netty框架实现通信

    在Android开发中,为了实现高效的网络通信,开发者常常会选择使用Netty框架。Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于多种协议的服务器和客户端应用。本篇文章将详细探讨如何在Android环境中利用...

    Android使用Netty网络框架实践(客户端、服务端)

    在Android开发中,有时我们需要构建高性能的网络通信应用,这时Netty框架就能派上大用场。Netty是一个异步事件驱动的网络应用程序框架,它为高性能、高可用性的网络服务器和客户端提供了一种简单易用的方式。本实践...

    Android-netty和socket通信的demo

    在Android开发中,网络通信是不可或缺的一部分,而Netty是一个高效、强大的网络应用程序框架,它为构建高性能、稳定的网络服务器提供了便利。本示例“Android-netty和socket通信的demo”将展示如何在Android平台上...

    Android使用netty

    总结来说,Android使用Netty框架进行网络通信,能带来更高效、灵活的解决方案。通过学习和实践这个Demo,你将掌握Netty的基本用法,包括创建Bootstrap、配置Pipeline、处理I/O事件以及自定义编解码器等,从而提升你...

    Android与Netty的结合通信

    本文将深入探讨如何将Android应用程序与Netty框架相结合,实现高效、可靠的网络通信。Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于开发服务器和客户端的Java应用。通过将Netty引入Android开发,我们...

    android netty使用demo

    总之,"android netty使用demo"提供了一个基础的Android Netty应用实例,展示了如何在Android环境中使用Netty实现长连接通信。然而,实际开发中,还需要考虑更多的细节和优化,以满足复杂的网络应用场景。

    基于Netty框架的Android内网推送demo

    本项目"基于Netty框架的Android内网推送demo"就是这样一个示例,它演示了如何利用Netty在Android设备上实现内网通信。 首先,我们需要了解Netty的核心概念。Netty的主要组件包括Bootstrap(引导类)、...

    android+netty 的demo

    在Android平台上,Netty是一个非主流但非常有潜力的网络通信框架。Netty最初是为Java服务器设计的,但由于其高效、灵活和丰富的特性,也被一些开发者引入到Android开发中,用于实现高性能的网络通信。这个"android+...

    Android与Netty服务器连接

    在Android开发中,有时我们需要实现一个客户端应用与服务器进行高效、稳定的通信,这时Netty作为一个高性能、异步事件驱动的网络应用程序框架就显得尤为重要。本文将深入探讨如何在Android平台上利用Netty构建客户端...

    netty-all-5.0.0 包含Alpha1 Alpha2

    描述中的"Android netty"表明这是Netty框架在Android环境下的应用。由于Android原生并不支持NIO,因此在Android上使用Netty需要一些额外的适配和注意事项。Netty为Android提供了跨平台的网络编程能力,使得开发者...

    基于netty与protobuf的Android手机视频实时传输

    在现代移动应用开发中,实现实时视频传输是一项挑战性的任务,尤其是在Android平台上。本项目“基于Netty与Protobuf的Android手机视频实时传输”利用了高性能的网络库Netty和高效的序列化框架Protobuf,实现了高效、...

    Android Netty的使用(结合RxJava)

    在Android开发中,Netty作为一个高性能、异步事件驱动的网络应用框架,常用于构建可伸缩的服务。本文将深入探讨如何在Android环境中利用Netty进行网络通信,并结合RxJava来处理异步操作,提高应用的响应效率。 首先...

    基于Netty的Android点对点聊天软件-源码

    通过深入学习这个基于Netty的Android点对点聊天软件源码,开发者可以了解到如何将Netty框架与Android平台相结合,实现高效、稳定的网络通信,同时掌握Android应用开发的多个核心技能。对于想要提升Android网络编程...

    netty android Client + server

    1. **异步编程模型**:Android系统主要基于单线程模型,因此在Android应用中使用Netty需要特别注意线程管理。Netty的异步事件驱动模型能够很好地处理网络IO操作,避免阻塞主线程,提高应用响应性。 2. **...

    基于Netty二次封装的Android链路通讯库,用以快速开发高性能.zip

    用以快速开发高性能”表明了这个项目是一个专为Android平台设计的通信库,它利用了Netty框架进行优化和封装,目的是为了简化开发者在构建高性能网络应用时的工作,特别是在快应用开发中。Netty是一个非常著名的、高...

    netty protobuf序列化 推送 android客户端

    本文将深入探讨如何使用Netty框架结合Protocol Buffers(protobuf)进行序列化,并实现数据推送至Android客户端。 Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发可维护的高性能协议服务器和客户端。...

    android netty5局域网通讯(客户端+服务端)

    在Android平台上实现基于Netty 5的局域网通信是一个技术含量较高的任务,涉及到...在`Netty_p`这个压缩包文件中,很可能包含了示例代码、配置文件和其他辅助资源,用于直接运行一个完整的Android Netty局域网通信示例。

    socket长连接,netty服务器与android源码

    Socket长连接和Netty框架是网络编程中的重要概念,尤其在Android应用开发和服务器通信中扮演着关键角色。本文将深入探讨这两个主题,并通过提供的源码进行实例解析。 首先,让我们了解一下Socket。Socket是网络通信...

Global site tag (gtag.js) - Google Analytics