1、服务端建立类TestServerHandler
代码:
package com.cora.api.client;
import java.nio.charset.Charset;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
public class TestServerHandler extends SimpleChannelUpstreamHandler {
@Override
public void messageReceived(
ChannelHandlerContext ctx, MessageEvent e) {
ChannelBuffer acceptBuff = (ChannelBuffer) e.getMessage();
String info = acceptBuff.toString("UTF-8");
// info = acceptBuff.toString();
if(info != null && !"".equals(info)) {
System.out.println("Netty:"+info);
ChannelBuffer sendBuff = ChannelBuffers.dynamicBuffer();
sendBuff.writeBytes("Netty:Yes".getBytes());
e.getChannel().write(sendBuff);
}else {
e.getChannel().write("_______服务端没有接收到信息!");
}
e.getChannel().close();
}
@Override
public void exceptionCaught(
ChannelHandlerContext ctx, ExceptionEvent e) {
e.getCause();
e.getChannel().close();
}
}
2、服务端建立类TestServer
代码:
package com.cora.api.client;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
public class TestServer {
private final int port;
public TestServer(int port) {
this.port = port;
}
public void run() {
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
// bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
// public ChannelPipeline getPipeline() throws Exception {
// return Channels.pipeline(new TestServerHandler());
// }
// });
TestServerHandler handler = new TestServerHandler();
bootstrap.getPipeline().addLast("handler", handler);
bootstrap.setOption("child.tcpNoDelay", true);
bootstrap.setOption("child.keepAlive", true);
bootstrap.bind(new InetSocketAddress(port));
}
public static void main(String[] args) throws Exception {
new TestServer(8080).run();
}
}
3客户端建立类TestClientHandler
代码:
package com.cora.api.client;
import java.nio.charset.Charset;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.ChannelStateEvent;
import org.jboss.netty.channel.ExceptionEvent;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelUpstreamHandler;
public class TestClientHandler extends SimpleChannelUpstreamHandler {
private final String firstMessage;
public TestClientHandler(String firstMessageSize) {
firstMessage = firstMessageSize;
}
@Override
public void channelConnected(
ChannelHandlerContext ctx, ChannelStateEvent e) {
ChannelBuffer sendBuff = ChannelBuffers.dynamicBuffer();
sendBuff.writeBytes(firstMessage.getBytes());
e.getChannel().write(sendBuff);
System.out.println("I:" + firstMessage);
}
@Override
public void messageReceived(
ChannelHandlerContext ctx, MessageEvent e) {
ChannelBuffer acceptBuff = (ChannelBuffer) e.getMessage();
String info = acceptBuff.toString("UTF-8");
// info = acceptBuff.toString();
System.out.println(info);
e.getChannel().close();
}
@Override
public void exceptionCaught(
ChannelHandlerContext ctx, ExceptionEvent e) {
e.getCause();
e.getChannel().close();
}
}
4、客户端建立类TestClient
代码:
package com.cora.api.client;
import java.net.InetSocketAddress;
import java.util.concurrent.Executors;
import org.jboss.netty.bootstrap.ClientBootstrap;
import org.jboss.netty.channel.ChannelFuture;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory;
public class TestClient {
private final String host;
private final int port;
private final String firstMessageSize;
public TestClient(String host, int port, String firstMessageSize) {
this.host = host;
this.port = port;
this.firstMessageSize = firstMessageSize;
}
public void run() {
ClientBootstrap bootstrap = new ClientBootstrap(
new NioClientSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
// bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
// public ChannelPipeline getPipeline() throws Exception {
// return Channels.pipeline(
// new TestClientHandler(firstMessageSize));
// }
// });
TestClientHandler handler = new TestClientHandler(firstMessageSize);
bootstrap.getPipeline().addLast("handler", handler);
bootstrap.setOption("tcpNoDelay", true);
bootstrap.setOption("keepAlive", true);
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port));
future.getChannel().getCloseFuture().awaitUninterruptibly();
bootstrap.releaseExternalResources();
}
public static void main(String[] args) throws Exception {
new TestClient("127.0.0.1", 8080, "Hello, Netty!我可以问一个问题吗?").run();
}
}
5、示例代码见附件
分享到:
相关推荐
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速...通过学习和理解这段代码,开发者可以进一步探索Netty的高级特性,如编解码器、心跳机制、安全性和性能优化等,从而更好地应用到实际的项目开发中。
在Android平台上实现即时通讯功能,Netty和Protobuf(Protocol Buffers)的结合是一个高效、可靠的解决方案。...开发者可以通过学习和实践这个示例,提升自己在Android网络编程和数据交换方面的技能。
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。...通过研究这个示例,可以深入学习 Netty 的核心概念以及如何在 Android 和后端服务之间建立稳定的数据交互。
### Netty学习教程知识点梳理 #### 一、Netty简介 - **定义**:Netty是由JBOSS提供的一个高性能的、异步的、事件驱动的网络应用框架,主要用于简化和加速高性能网络应用和服务的开发过程。 - **应用场景**: - ...
压缩包中的“netty-book-source”很可能包含了Netty框架的实战代码示例,这些示例可以帮助你理解以下知识点: 1. **Channel初始化与注册**:了解如何创建并初始化一个Channel,以及如何将它注册到EventLoop中。 2....
通过阅读和学习这个代码,你可以掌握 Netty 的基本架构,包括服务器和客户端的创建、事件驱动模型、ChannelPipeline 的配置,以及数据编解码等关键概念。这对于进一步研究高并发、高性能的网络应用开发非常有帮助。
第三个例子是一个参考的网站地址,可能提供更详细的Netty教程和示例代码,帮助学习者扩展知识。网站资源可以包含各种协议(如HTTP、FTP、TCP/UDP等)的实现,以及如何处理异常、性能优化和日志记录等高级主题。 在...
Netty 的源代码清晰且注释丰富,对于学习和调试都非常有帮助。通过阅读源码,我们可以更好地理解其内部工作原理,例如事件的处理流程、I/O 操作的优化以及内存管理策略。 至于“工具”,Netty 可以与其他开发工具和...
这个"Netty4.0 demo"压缩包包含了一些Netty 4.0版本的应用示例代码,可以帮助我们更好地理解和学习Netty的工作原理以及如何在实际项目中运用它。 1. **Netty简介** Netty 是由JBOSS组织开发的一个开源项目,最初...
Netty是一个高性能、异步事件驱动的网络应用框架,它被广泛用于开发高效的服务器和客户端,尤其在处理高并发...通过学习和理解这个示例,你可以深入理解Netty框架的工作原理,并为构建更复杂的网络服务打下坚实的基础。
在Netty中,通常会有一个启动类,它负责初始化`ServerBootstrap`并绑定监听端口。`ChannelInitializer`是用于配置新创建的`Channel`的,它会添加`ChannelHandler`到`ChannelPipeline`中。`ChannelHandler`是Netty的...
### Netty学习笔记知识点概述 #### 一、Netty简介 Netty是一个广泛使用的高性能、异步事件驱动的网络应用程序框架,它简化了网络编程的复杂性,使得开发者能够更轻松地开发高性能、高可靠性的网络服务器和客户端。...
在"netty-demo01"这个压缩包中,可能包含了实现上述步骤的源代码示例,包括`pom.xml`配置文件,`Main`类启动Netty服务器,以及相关的处理器类和配置文件。通过学习和研究这些代码,你可以更深入地理解SpringBoot与...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高...在提供的实例中,我们可以学习如何使用 Netty 实现客户端与服务端的交互,这对于理解 Netty 的工作原理和提升网络编程能力非常有帮助。
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高...通过PPT的学习和示例代码的实践,开发者可以深入理解Netty的工作原理,从而在实际项目中更好地利用其优势,构建高效稳定的网络应用。
1. **初始化 ServerBootstrap**:这是 Netty 服务端的启动类,用于配置服务器并启动监听。 2. **配置 ChannelPipeline**:这是 Netty 中处理网络事件的链式结构,你可以添加自定义的 ChannelHandler 来处理特定的...
首先,Netty 5可能已经不被广泛使用,因为最新的稳定版本通常是更好的选择,但学习历史版本可以帮助理解其演进过程。这个实例提供了基于Maven的工程结构,这意味着它利用Maven的依赖管理功能来简化项目构建和依赖项...
69_Netty初始化流程总结及Channel与ChannelHandlerContext作用域分析 70_Channel注册流程深度解读 71_Channel选择器工厂与轮询算法及注册底层实现 72_Netty线程模型深度解读与架构设计原则 73_Netty底层架构系统总结...
在Android开发中,为了实现高效的网络通信,开发者常常会选择使用Netty框架。Netty是一个高性能、异步事件驱动的网络应用程序框架,...在项目`NettyDemo`中,你可以找到一个简单的示例,帮助理解这些概念并进行实践。