- 浏览: 714870 次
- 性别:
- 来自: 宇宙
文章分类
最新评论
-
天使建站:
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 7084-----------------------201805 ... -
多线程:如何确定所有任务都执行完成了?
2018-04-02 15:30 3481--------------------20180502更 ... -
多线程写同一个excel文件(导出)
2018-03-22 15:14 14217今天是2018.03.22,已经 ... -
进一步理解get和set
2016-11-17 17:23 1101做CRUD的功能时,我们常常会定义一个和表对应的实体类信息 ... -
使用Hessian来进行远程调用
2016-11-03 09:39 797Hessian是一个轻量级的remoting onhttp工 ... -
测试redis+keepalived实现简单的主备切换
2016-07-17 18:23 6207keepalived是一个是集群管理中保证集群高可用的一个 ... -
关于log4j错误日志的保存
2016-05-06 18:33 1837因为最近着手了项目里面日志的规范化工作,之前开发的时候都是 ... -
解决一个web的项目定时任务入库“卡住”问题
2016-05-04 15:16 2364事情的起因是因为我 ... -
No qualifying bean of type is defined: expected single matching bean but found 2
2016-03-28 18:59 2241最近在Spring的注解中,尝试获取一个Bean出现了如题 ... -
一种解决在Linux环境下发送短信中文乱码问题的方案
2016-03-10 19:15 2152这几天在折腾短信的 ... -
【反ajax】webSocket实现实时推送功能
2016-01-21 18:28 8969额。前天就说有时间要研究下webSocket这种实时推技术 ... -
运用Comet技术实现服务端往客户端主动推送数据(结合redis发布/订阅)
2016-01-18 21:07 1记得我之前写过 redis主动向页面push数据 的文章 ... -
运用Comet技术实现服务端往客户端主动推送数据(结合redis发布/订阅)
2016-01-18 21:00 3045记得我之前写过 redis主动向页面push数据 的文 ... -
将Java Project (非web项目)打成Jar包并实现相关功能
2015-11-25 17:21 4911【若要转载,请标明出处,谢谢~~】 http://rai ... -
webService的初步认识和简单用例
2015-10-19 18:19 2624一、什么是webService? Web Service ... -
object和byte[]数组相互转换
2015-09-25 14:15 0package com.kayak.util.object; ... -
单例模式在高并发情形下造成的访问覆盖问题
2015-09-25 11:29 5959好吧,最近我特么是跟高并发杠上了。。 单例模式想必很很常见 ... -
oscache之刷新缓存flushEntry的使用
2015-09-19 15:12 2159========================== 困 ... -
多线程 & 异步调用 的理解
2015-09-17 11:52 9176最近做项目,高并发的情况比较常见,因此常常需要用到多线程。 ... -
ServeltContext的理解和一种使用场景
2015-09-17 11:12 2128最近做项目,用到了一个比较不熟悉的东西,但我自己又觉得很有 ...
相关推荐
Netty实现简单的客户端服务端通信示例,户端发送请求给服务端,并由服务端响应客户端请求,希望对初学Netty的同学有所帮助。
主要给大家介绍了关于Spring Boot集成netty实现客户端服务端交互的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。...
Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
Java编写的山寨QQ,多人聊天+用户在线,程序分服务端和客户端,典型C/S结构, 当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket...