- 浏览: 725250 次
- 性别:
- 来自: 宇宙
文章分类
最新评论
-
天使建站:
http://www.aijquery.cn/Html/bia ...
选择控件:select ,radio,checkbox之用jquery获取选中值的小结 -
wahahachuang8:
GoEasy实时Web推送,支持后台推送和前台推送两种:后台推 ...
【反ajax】webSocket实现实时推送功能 -
white_crucifix:
Str5=Str1+Str2+Str3+Str4,这条语句执行 ...
面试系列(二):JVM工作原理 -
yanxing2012:
写的不对,http://blog.csdn.net/lian_ ...
List集合的复制方式小结 -
u012879379:
嗯,一针见血的指出了问题,谢谢博主
JedisDataException: ERR only (P)SUBSCRIBE / (P)UNSUBSCRIBE / QUIT allowed in thi
Netty是基于事件驱动的、异步的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。是一种NIO框架,下面从最简单的Hello World示例开始,演示服务端和客户端交互进行Netty交互。
1.首先,创建服务端
2、创建服务端事件处理的站点Handler,里面包含回调方法用于处理与客户端交互时的操作。
3、创建客户端
4、创建客户端的Handler
5、先启动server端,再启动client端。可以分别在服务端和客户端的控制台看到如下消息:
server console:
--------服务端-------
服务端接收到消息:Hello world, I'm client
client console:
-----------客户端---------------
客户端接收到消息:Hello world, I'm server
6、注意在handler中,传递字符串必须以ChannelBuffer为载体,不能直接用String传递。
当客户端和服务端连接上后,先回调的是channelConnected方法;之后才是messageReceived方法。
至此,就完成了Netty客户端与服务端的简单交互!
1.首先,创建服务端
public class DiscardServer { private int port; public DiscardServer(int port) { super(); this.port = port; } public void run() { //配置Server ServerBootstrap bootstrap = new ServerBootstrap(new NioServerSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool() )); //设置pipeFactory bootstrap.setPipelineFactory(new ChannelPipelineFactory() { @Override public ChannelPipeline getPipeline() throws Exception { ChannelPipeline pipeline = Channels.pipeline(new DiscardServerHandler()); return pipeline; } }); //绑定server端端口 bootstrap.bind(new InetSocketAddress(port)); } public static void main(String[] args) { new DiscardServer(8080).run(); } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
2、创建服务端事件处理的站点Handler,里面包含回调方法用于处理与客户端交互时的操作。
class DiscardServerHandler extends SimpleChannelHandler { @Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { System.out.println("--------服务端-------"); String str = "Hello world, I'm server"; ChannelBuffer buffer = ChannelBuffers.buffer(str.length()); buffer.writeBytes(str.getBytes()); e.getChannel().write(buffer); } @Override public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { ChannelBuffer buffer = (ChannelBuffer) e.getMessage(); System.out.println("服务端接收到消息:" + buffer.toString(Charset.defaultCharset())); } }
3、创建客户端
public class TimeClient { private String host; private int port; public TimeClient(String host, int port) { super(); this.host = host; this.port = port; } public void run() { ClientBootstrap bootstrap = new ClientBootstrap( new NioClientSocketChannelFactory( Executors.newCachedThreadPool(), Executors.newCachedThreadPool() ) ); bootstrap.setPipelineFactory(new ChannelPipelineFactory() { //ChannelPipeline 管道、传输途径 @Override public ChannelPipeline getPipeline() throws Exception { // ChannelPipeline pipeline = Channels.pipeline(); // pipeline.addLast("encode", new StringEncoder()); // pipeline.addLast("decode", new StringDecoder()); // pipeline.addLast("handler", new TimeClientHandler()); return Channels.pipeline(new TimeClientHandler()); } }); // bootstrap.setOption("tcpNoDelay", true); // bootstrap.setOption("keepAlive", true); // Start the connection attempt. ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port)); // Wait until the connection is closed or the connection attempt fails. future.getChannel().getCloseFuture().awaitUninterruptibly(); // Shut down thread pools to exit. bootstrap.releaseExternalResources(); } public static void main(String[] args) { new TimeClient("127.0.0.1", 8080).run(); } public String getHost() { return host; } public void setHost(String host) { this.host = host; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } }
4、创建客户端的Handler
class TimeClientHandler extends SimpleChannelHandler { //这个属于事件相关的处理 @Override public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { System.out.println("-----------客户端---------------"); String msg = "Hello world, I'm client"; ChannelBuffer buffer = ChannelBuffers.buffer(msg.length()); buffer.writeBytes(msg.getBytes()); e.getChannel().write(buffer); } @Override public void messageReceived( ChannelHandlerContext ctx, MessageEvent e) { // Send back the received message to the remote peer. ChannelBuffer acceptBuff = (ChannelBuffer) e.getMessage(); String info = acceptBuff.toString(Charset.defaultCharset()); System.out.println("客户端接收到消息:" + info); e.getChannel().close(); } }
5、先启动server端,再启动client端。可以分别在服务端和客户端的控制台看到如下消息:
server console:
--------服务端-------
服务端接收到消息:Hello world, I'm client
client console:
-----------客户端---------------
客户端接收到消息:Hello world, I'm server
6、注意在handler中,传递字符串必须以ChannelBuffer为载体,不能直接用String传递。
当客户端和服务端连接上后,先回调的是channelConnected方法;之后才是messageReceived方法。
至此,就完成了Netty客户端与服务端的简单交互!
发表评论
-
关于IDEA的debug阻塞模式的一个坑
2018-05-03 17:28 7188-----------------------201805 ... -
多线程:如何确定所有任务都执行完成了?
2018-04-02 15:30 3576--------------------20180502更 ... -
多线程写同一个excel文件(导出)
2018-03-22 15:14 14495今天是2018.03.22,已经 ... -
进一步理解get和set
2016-11-17 17:23 1171做CRUD的功能时,我们常常会定义一个和表对应的实体类信息 ... -
使用Hessian来进行远程调用
2016-11-03 09:39 841Hessian是一个轻量级的remoting onhttp工 ... -
测试redis+keepalived实现简单的主备切换
2016-07-17 18:23 6279keepalived是一个是集群管理中保证集群高可用的一个 ... -
关于log4j错误日志的保存
2016-05-06 18:33 1891因为最近着手了项目里面日志的规范化工作,之前开发的时候都是 ... -
解决一个web的项目定时任务入库“卡住”问题
2016-05-04 15:16 2415事情的起因是因为我 ... -
No qualifying bean of type is defined: expected single matching bean but found 2
2016-03-28 18:59 2354最近在Spring的注解中,尝试获取一个Bean出现了如题 ... -
一种解决在Linux环境下发送短信中文乱码问题的方案
2016-03-10 19:15 2207这几天在折腾短信的 ... -
【反ajax】webSocket实现实时推送功能
2016-01-21 18:28 9019额。前天就说有时间要研究下webSocket这种实时推技术 ... -
运用Comet技术实现服务端往客户端主动推送数据(结合redis发布/订阅)
2016-01-18 21:07 1记得我之前写过 redis主动向页面push数据 的文章 ... -
运用Comet技术实现服务端往客户端主动推送数据(结合redis发布/订阅)
2016-01-18 21:00 3117记得我之前写过 redis主动向页面push数据 的文 ... -
将Java Project (非web项目)打成Jar包并实现相关功能
2015-11-25 17:21 4959【若要转载,请标明出处,谢谢~~】 http://rai ... -
webService的初步认识和简单用例
2015-10-19 18:19 2686一、什么是webService? Web Service ... -
object和byte[]数组相互转换
2015-09-25 14:15 0package com.kayak.util.object; ... -
单例模式在高并发情形下造成的访问覆盖问题
2015-09-25 11:29 6005好吧,最近我特么是跟高并发杠上了。。 单例模式想必很很常见 ... -
oscache之刷新缓存flushEntry的使用
2015-09-19 15:12 2202========================== 困 ... -
多线程 & 异步调用 的理解
2015-09-17 11:52 9220最近做项目,高并发的情况比较常见,因此常常需要用到多线程。 ... -
ServeltContext的理解和一种使用场景
2015-09-17 11:12 2158最近做项目,用到了一个比较不熟悉的东西,但我自己又觉得很有 ...
相关推荐
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨如何使用 Netty 实现简单的客户端-服务端通信,这对于初学者来说是一个很好的起点。...
标题中的“Netty实现Java服务端和C#客户端联通”是指使用Netty作为Java服务器框架,与C#客户端(使用DotNetty库)进行通信的一种技术实现。这涉及到跨平台的网络通信,以及两个不同编程语言间的交互。 Netty是Java...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个“netty3 客户端 服务端聊天”的示例中,我们将探讨如何使用 Netty 3 实现客户端和服务端之间的长连接...
在"java应用netty服务端和客户端"的示例中,Netty被用来构建一个简单的通信系统,其中包含服务端(Server)和客户端(Client)。为了实现通信,服务端和客户端都需要定义自己的`model对象`,这些对象通常包含了数据...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在这个“netty客户端与服务器信息交互demo”中,我们将深入探讨Netty如何实现客户端和服务器之间的信息交换。...
Netty是一个异步事件驱动的网络应用程序框架,它为高性能、高可用性的网络服务器和客户端提供了一种简单易用的方式。本实践将详细介绍如何在Android环境中使用Netty进行客户端和服务端的通信。 首先,我们需要理解...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本案例中,"Netty3客户端服务端hi allen.zip" 提供了一个基于 Netty 3 的简单客户端和服务端示例,旨在帮助...
尽管Netty本身是用Java编写的,但通过跨语言交互,C#也可以利用Netty进行网络通信。 在描述中提到的"自己研究出来并与大家分享"表明这可能是一个个人研究项目,作者愿意将他们的学习成果与社区共享。这通常意味着...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本示例中,"NettyDemo" 提供了一个完整的解决方案,包括客户端和服务端的实现,适用于 Android 客户端和...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。这个压缩包包含的是 Netty 的一个实际应用示例,专注于客户端和服务器端的实现。以下是对这个“netty 包含...
在"HelloNetty"示例中,我们可以看到一个简单的服务端和客户端的创建过程,以及如何通过Netty进行数据交互。这个例子通常会包含创建EventLoopGroup、定义处理器、配置并启动ServerBootstrap或Bootstrap,以及在...
WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行全双工通信,即数据可以在两个方向上同时传输,极大地提高了实时性。在Web应用程序中,WebSocket为开发者提供了低延迟、高效率的交互方式,...
Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。在本文中,我们将深入探讨 Netty 5 版本中的关键概念和特性,以及如何创建一个简单的客户端-服务器实例。 ...
Netty是Java领域的一个高性能、异步事件驱动的网络应用程序框架,常用于创建服务器和客户端的网络通信。而MQTT(Message Queuing Telemetry Transport)是一种轻量级的发布/订阅消息协议,常用于物联网(IoT)设备之间...
本示例提供了服务端和客户端的完整代码,非常适合初学者理解和实践Socket通信。 首先,我们来看看“Socket”。Socket是操作系统提供的一种进程间通信(IPC)机制,它允许两个网络上的应用进行数据交换。在TCP/IP...
Netty是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。Netty的核心是其NIO(非阻塞I/O)模型,它允许在一个线程中处理多个连接,大大提升了系统的并发能力。Netty...
在SpringMVC和Netty集成中,TCP通信用于客户端和服务端之间的数据交换。客户端发送数据包,服务端接收并解析数据,然后执行相应的业务逻辑,如数据入库。 5. **客户端实现**:在本示例中,客户端包含了发送TCP...
在"nettyproject"中,我们可以看到针对Netty服务端和客户端的开发实例。NIO(Non-blocking I/O)编程是Netty的核心特性,它利用Java的NIO库实现了低延迟、高吞吐量的网络通信。NIO不同于传统的阻塞I/O模型,它允许一...
在本示例中,我们将深入探讨如何利用 Netty 和 Google 的 Protocol Buffers(protobuf)来构建一个简单的服务端和客户端通信系统。 Protocol Buffers 是 Google 提供的一种数据序列化协议,它可以将结构化数据序列...