最近在做一个项目,基于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;
}
这个需要根据自己所定义的协议来处理
分享到:
相关推荐
在Android开发中,为了实现高效的网络通信,开发者常常会选择使用Netty框架。Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于多种协议的服务器和客户端应用。本篇文章将详细探讨如何在Android环境中利用...
在Android开发中,有时我们需要构建高性能的网络通信应用,这时Netty框架就能派上大用场。Netty是一个异步事件驱动的网络应用程序框架,它为高性能、高可用性的网络服务器和客户端提供了一种简单易用的方式。本实践...
在Android开发中,网络通信是不可或缺的一部分,而Netty是一个高效、强大的网络应用程序框架,它为构建高性能、稳定的网络服务器提供了便利。本示例“Android-netty和socket通信的demo”将展示如何在Android平台上...
总结来说,Android使用Netty框架进行网络通信,能带来更高效、灵活的解决方案。通过学习和实践这个Demo,你将掌握Netty的基本用法,包括创建Bootstrap、配置Pipeline、处理I/O事件以及自定义编解码器等,从而提升你...
本文将深入探讨如何将Android应用程序与Netty框架相结合,实现高效、可靠的网络通信。Netty是一个高性能、异步事件驱动的网络应用程序框架,适用于开发服务器和客户端的Java应用。通过将Netty引入Android开发,我们...
总之,"android netty使用demo"提供了一个基础的Android Netty应用实例,展示了如何在Android环境中使用Netty实现长连接通信。然而,实际开发中,还需要考虑更多的细节和优化,以满足复杂的网络应用场景。
本项目"基于Netty框架的Android内网推送demo"就是这样一个示例,它演示了如何利用Netty在Android设备上实现内网通信。 首先,我们需要了解Netty的核心概念。Netty的主要组件包括Bootstrap(引导类)、...
在Android平台上,Netty是一个非主流但非常有潜力的网络通信框架。Netty最初是为Java服务器设计的,但由于其高效、灵活和丰富的特性,也被一些开发者引入到Android开发中,用于实现高性能的网络通信。这个"android+...
在Android开发中,有时我们需要实现一个客户端应用与服务器进行高效、稳定的通信,这时Netty作为一个高性能、异步事件驱动的网络应用程序框架就显得尤为重要。本文将深入探讨如何在Android平台上利用Netty构建客户端...
描述中的"Android netty"表明这是Netty框架在Android环境下的应用。由于Android原生并不支持NIO,因此在Android上使用Netty需要一些额外的适配和注意事项。Netty为Android提供了跨平台的网络编程能力,使得开发者...
在现代移动应用开发中,实现实时视频传输是一项挑战性的任务,尤其是在Android平台上。本项目“基于Netty与Protobuf的Android手机视频实时传输”利用了高性能的网络库Netty和高效的序列化框架Protobuf,实现了高效、...
在Android开发中,Netty作为一个高性能、异步事件驱动的网络应用框架,常用于构建可伸缩的服务。本文将深入探讨如何在Android环境中利用Netty进行网络通信,并结合RxJava来处理异步操作,提高应用的响应效率。 首先...
通过深入学习这个基于Netty的Android点对点聊天软件源码,开发者可以了解到如何将Netty框架与Android平台相结合,实现高效、稳定的网络通信,同时掌握Android应用开发的多个核心技能。对于想要提升Android网络编程...
1. **异步编程模型**:Android系统主要基于单线程模型,因此在Android应用中使用Netty需要特别注意线程管理。Netty的异步事件驱动模型能够很好地处理网络IO操作,避免阻塞主线程,提高应用响应性。 2. **...
用以快速开发高性能”表明了这个项目是一个专为Android平台设计的通信库,它利用了Netty框架进行优化和封装,目的是为了简化开发者在构建高性能网络应用时的工作,特别是在快应用开发中。Netty是一个非常著名的、高...
本文将深入探讨如何使用Netty框架结合Protocol Buffers(protobuf)进行序列化,并实现数据推送至Android客户端。 Netty是一个高性能、异步事件驱动的网络应用框架,适用于开发可维护的高性能协议服务器和客户端。...
在Android平台上实现基于Netty 5的局域网通信是一个技术含量较高的任务,涉及到...在`Netty_p`这个压缩包文件中,很可能包含了示例代码、配置文件和其他辅助资源,用于直接运行一个完整的Android Netty局域网通信示例。
Socket长连接和Netty框架是网络编程中的重要概念,尤其在Android应用开发和服务器通信中扮演着关键角色。本文将深入探讨这两个主题,并通过提供的源码进行实例解析。 首先,让我们了解一下Socket。Socket是网络通信...