------------------------------------
1
------------------------------------
package admin.netty;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;
public class TimeClientHandler extends SimpleChannelHandler {
private String returnFlag = null;
@Override
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
CtrlProtocol m = (CtrlProtocol) e.getMessage();
this.returnFlag = m.getFlag();
//System.out.println(returnFlag);
e.getChannel().close();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) {
e.getCause().printStackTrace();
e.getChannel().close();
}
public ChannelFuture process(Channel channel,CtrlProtocol requestParameter) {
return channel.write(requestParameter);
}
public String getReturnFlag(){
return this.returnFlag;
}
}
-------------------------------
2
-------------------------------
package admin.netty;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
public class TimeClientPipelineFactory implements ChannelPipelineFactory {
public ChannelPipeline getPipeline() {
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("decoder", new CtrlProtocolDecoder());
pipeline.addLast("encoder", new CtrlProtocolEncoder());
pipeline.addLast("handler", new TimeClientHandler());
return pipeline;
}
}
-------------------------------
3
-------------------------------
package admin.netty;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.frame.FrameDecoder;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class CtrlProtocolDecoder extends FrameDecoder {
private static final Log ilog = LogFactory.getLog(CtrlProtocolDecoder.class);
/*
* (non-Javadoc)
* @see org.jboss.netty.handler.codec.frame.FrameDecoder#decode(org.jboss.netty.channel.ChannelHandlerContext,
* org.jboss.netty.channel.Channel, org.jboss.netty.buffer.ChannelBuffer)
*/
@Override
protected CtrlProtocol decode(ChannelHandlerContext arg0, Channel arg1, ChannelBuffer arg2) throws Exception {
ChannelBuffer buf = arg2;
if (buf.readableBytes() < 8) {
ilog.error("收到的协议数据不完整,无法解析协议头.");
return null;
}
short head_flag = buf.readShort();
short head_code = buf.readShort();
int head_length = buf.readInt();
CtrlProtocol protocol = new CtrlProtocol(head_flag, head_code, head_length);
ilog.info("收到的协议:" + head_flag + " " + head_code + " " + head_length + "\n");
return protocol;
}
}
-------------------------------
4
-------------------------------
package admin.netty;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
public class CtrlProtocolEncoder extends OneToOneEncoder {
/*
* (non-Javadoc)
* @see org.jboss.netty.handler.codec.oneone.OneToOneEncoder#encode(org.jboss.netty.channel.ChannelHandlerContext,
* org.jboss.netty.channel.Channel, java.lang.Object)
*/
@Override
protected Object encode(ChannelHandlerContext arg0, Channel arg1, Object arg2) throws Exception {
CtrlProtocol protocol = (CtrlProtocol) arg2;
ChannelBuffer buf = ChannelBuffers.dynamicBuffer();
buf.writeShort((short) protocol.getFlag());
buf.writeShort((short) protocol.getCode());
buf.writeInt(protocol.getLength());
/*略去*/
return buf;
}
}
-------------------------------
5
-------------------------------
package admin.netty;
public class CtrlProtocol {
private short flag = 0;
private short code = 0;
private int length = 0;
public CtrlProtocol(short f, short c, int l) {
flag = f;
code = c;
length = l;
}
public static CtrlProtocol getCtrlInstance() {
return new CtrlProtocol((short) 1, (short) 1, (short) 1);
}
public short getFlag() {
return flag;
}
public void setFlag(short flag) {
this.flag = flag;
}
public short getCode() {
return code;
}
public void setCode(short code) {
this.code = code;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
/* 略去*/
}
-------------------------------
6 客户端执行异步发送接收(服务端返回数据与客户端发送数据结构一致)
-------------------------------
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.Channel;
import org.jboss.netty.channel.ChannelFactory;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
....
CtrlProtocol cp = CtrlProtocol.getCtrlInstance();
....
String flag = this.toDo
(cp);
///////////////////////////////////////////////
//Socket异步发送接收通讯协议
//参数:CtrlProtocol 协议
private String toDo
(CtrlProtocol cp) throws Exception{
String flag = "0";//结果
String host ="127.0.0.1";
int port = 7788;
ChannelFactory factory = new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool());
ClientBootstrap bootstrap = new ClientBootstrap(factory);
bootstrap.setPipelineFactory(new TimeClientPipelineFactory());
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
ChannelFuture future = bootstrap.connect(new InetSocketAddress(
host, port));
Channel channel = future.awaitUninterruptibly().getChannel();
TimeClientHandler handler = channel.getPipeline().get(TimeClientHandler.class);
handler.process(channel, cp);
future.awaitUninterruptibly();
if (!future.isSuccess()) {
future.getCause().printStackTrace();
}
future.getChannel().getCloseFuture().awaitUninterruptibly();
factory.releaseExternalResources();
flag = handler.getReturnFlag();
return flag;
}
分享到:
相关推荐
基于Netty实现的MQTT客户端_netty-mqtt-client
通过这个DEMO,开发者可以学习到如何使用Netty搭建一个即时通讯服务,理解其内部工作原理,并根据实际需求进行定制化开发。在实际应用中,还需要考虑安全性、容错性、可扩展性等多个方面,不断优化和完善。
利用netty实现Modbus TCP client/server READ COILS | 0x01 READ DISCRETE INPUTS | 0x02 READ HOLDING REGISTERS | 0x03 READ INPUT REGISTERS | 0x04 WRITE SINGLE COIL | 0x05 WRITE SINGLE REGISTER | 0x06 ...
netty pojo netty pojo替换 channelbuffer
在Netty中,数据的传输是通过`ByteBuf`实现的,这是一个高效且灵活的字节缓冲区,可以避免不必要的内存复制。`ByteBuf`提供了读写指针管理,方便我们处理不同格式的数据。 此外,Netty还提供了许多内置的协议支持,...
这个项目旨在为用户提供一个简单易用的聊天平台,用户可以通过图形化界面进行实时通信。下面将详细阐述这个聊天室的关键技术点。 【Netty】Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护...
标签中的“源码”可能暗示文章会涉及到Netty的内部实现细节,而“工具”可能是指Netty作为一个用于构建网络应用的工具。文件名称“boce_web”可能与博客所在的平台或者某种特定的Web服务有关,但没有更多信息可供...
在"java应用netty服务端和客户端"的示例中,Netty被用来构建一个简单的通信系统,其中包含服务端(Server)和客户端(Client)。为了实现通信,服务端和客户端都需要定义自己的`model对象`,这些对象通常包含了数据...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨 Netty 实时通讯的原理与应用,以及如何利用它构建 WebSocket 服务。 WebSocket 是...
而在 "netty-http-client" 文件中,包含了一个简单的 HTTP 客户端示例,演示了如何向服务器发送请求并接收响应。 总的来说,Netty 提供了强大而灵活的工具来构建 HTTP 客户端和服务器,无论是对于学习网络编程,...
物联网通讯协议,基于netty框架,支持COM(串口)和TCP协议,同时支持设备组多台设备高并发通讯。设计上采用工厂设计模式,代码采用继承和重写的方式实现高度封装,可作为SDK提供封装的接口,让具体的业务开发人员...
标题中的"C# Netty 客户端,服务器端包含双向接收"揭示了这是一个关于使用C#语言实现基于Netty框架的客户端和服务器端通信的项目。Netty是Java平台上的一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可...
Netty即时通讯项目Demo是一个基于Netty框架的简单即时通讯应用示例,旨在帮助初学者了解如何利用Netty实现一个基础的群聊功能。Netty是Java领域内一个高性能、异步事件驱动的网络应用程序框架,它极大地简化了网络...
这个小程序使用netty5进行udp网络通讯,客户端有两种,1:用netty5类库发送DatagramPacket和接收 2:直接使用DatagramSocket发送接收DatagramPacket 先运行netty_server的QuoteOfTheMomentServer, 在运行netty_...
赠送jar包:transport-netty4-client-5.5.1.jar; 赠送原API文档:transport-netty4-client-5.5.1-javadoc.jar; 赠送源代码:transport-netty4-client-5.5.1-sources.jar; 赠送Maven依赖信息文件:transport-netty...
在这个“使用 Netty 实现一个简单的聊天室”的项目中,我们将深入理解 Netty 的核心概念和组件,以及如何利用它们构建一个实时交互的聊天应用。 1. **Netty 基本概念** - **BossGroup 和 WorkerGroup**:在 Netty ...
在Spring Boot中整合这些组件,我们可以创建一个`@Configuration`类,声明`NettyServer`和`NettyClient`的`Bean`,并利用Spring Boot的自动配置功能。这样,当我们启动应用时,服务器和客户端会自动启动并进行连接。...
Maven Netty Client 是一个基于Java的高性能网络应用框架,它主要用于构建可伸缩、高并发的网络客户端。Netty 提供了一套强大而灵活的API,使得开发者能够高效地处理TCP、UDP、HTTP、HTTPS等各种协议的网络通信。本...
赠送jar包:transport-netty4-client-6.3.0.jar; 赠送原API文档:transport-netty4-client-6.3.0-javadoc.jar; 赠送源代码:transport-netty4-client-6.3.0-sources.jar; 赠送Maven依赖信息文件:transport-netty...
本文将详细介绍如何利用Netty框架来实现一个简易版的微信即时通讯系统,包括单聊和群聊功能。 #### 二、Netty概述 Netty是一个异步事件驱动的网络应用框架及工具库,用Java编写,能够快速开发高性能、高可靠性的...