主要思路:

* 服务器每隔两秒发送一次服务器的时间

* 客户端接收服务器端数据,打印出服务器的时间

服务器端代码

package netty.time.server;

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

import io.netty.handler.timeout.ReadTimeoutHandler;

import io.netty.handler.timeout.WriteTimeoutHandler;

/**

* Created with IntelliJ IDEA.

* User: ASUS

* Date: 14-5-7

* Time: 上午10:10

* To change this template use File | Settings | File Templates.

*/

public class TimeServer {

public static void main(String[] args) {

// EventLoop 代替原来的 ChannelFactory

EventLoopGroup bossGroup = new NioEventLoopGroup();

EventLoopGroup workerGroup = new NioEventLoopGroup();

try {

ServerBootstrap serverBootstrap = new ServerBootstrap();

serverBootstrap.group(bossGroup, workerGroup)

.channel(NioServerSocketChannel.class)

.childHandler(new ChannelInitializer() {

@Override

public void initChannel(SocketChannel ch) throws Exception {

ch.pipeline().addLast(

new TimeServerHandler(),

new WriteTimeoutHandler(10),

//控制写入超时10秒构造参数10表示如果持续10秒钟都没有数据写了,那么就超时。

new ReadTimeoutHandler(10)

);

}

}).option(ChannelOption.SO_KEEPALIVE, true);

ChannelFuture f = serverBootstrap.bind(9090).sync();

f.channel().closeFuture().sync();

} catch (InterruptedException e) {

} finally {

workerGroup.shutdownGracefully();

bossGroup.shutdownGracefully();

}

}

}

package netty.time.server;

import io.netty.buffer.ByteBuf;

import io.netty.channel.*;

public class TimeServerHandler extends ChannelInboundHandlerAdapter {

//ChannelHandlerContext通道处理上下文

@Override

public void channelActive(final ChannelHandlerContext ctx) throws InterruptedException { // (1)

while (true) {

ByteBuf time = ctx.alloc().buffer(4); //为ByteBuf分配四个字节

time.writeInt((int) (System.currentTimeMillis() / 1000L + 2208988800L));

ctx.writeAndFlush(time); // (3)

Thread.sleep(2000);

}

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {

cause.printStackTrace();

ctx.close();

}

}

客户端代码

package netty.time.server;

import io.netty.bootstrap.Bootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.EventLoopGroup;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioSocketChannel;

/**

* 服务器每隔两秒发送一次服务器的时间

* 客户端接收服务器端数据,打印出服务器的时间

*/

public class TimeClient {

public static void main(String[] args) throws Exception {

EventLoopGroup workerGroup = new NioEventLoopGroup();

try {

Bootstrap b = new Bootstrap(); // (1)

b.group(workerGroup); // (2)

b.channel(NioSocketChannel.class); // (3)

b.option(ChannelOption.SO_KEEPALIVE, true); // (4)

b.handler(new ChannelInitializer() {

@Override

public void initChannel(SocketChannel ch) throws Exception {

ch.pipeline().addLast(new TimeClientHandler());

}

});

// Start the client.

ChannelFuture f = b.connect("127.0.0.1", 9090).sync(); // (5)

// Wait until the connection is closed.

f.channel().closeFuture().sync();

} finally {

workerGroup.shutdownGracefully();

}

}

}

package netty.time.server;

import io.netty.buffer.ByteBuf;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.ChannelInboundHandlerAdapter;

import java.util.Date;

public class TimeClientHandler extends ChannelInboundHandlerAdapter {

@Override

public void channelRead(ChannelHandlerContext ctx, Object msg) {

ByteBuf m = (ByteBuf) msg;

try {

long currentTimeMillis = (m.readUnsignedInt() - 2208988800L) * 1000L;

System.out.println(new Date(currentTimeMillis));

} finally {

m.release();

}

}

@Override

public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {

cause.printStackTrace();

ctx.close();

}

}

运行结果:

Sun Jun 22 18:40:42 CST 2014

Sun Jun 22 18:40:44 CST 2014

Sun Jun 22 18:40:46 CST 2014

Sun Jun 22 18:40:48 CST 2014

Sun Jun 22 18:40:50 CST 2014

Sun Jun 22 18:40:52 CST 2014

Sun Jun 22 18:40:54 CST 2014

Sun Jun 22 18:40:56 CST 2014

.................................

========END========

client netty 主动发数据_Netty服务器无限循环给客户端发送数据相关推荐

  1. Netty服务器无限循环给客户端发送数据

    2019独角兽企业重金招聘Python工程师标准>>> 主要思路: * 服务器每隔两秒发送一次服务器的时间 * 客户端接收服务器端数据,打印出服务器的时间 服务器端代码 packag ...

  2. client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...

    小傅哥 | https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获.专注于原创专题案例编写,目前已完成的专题有:Netty4.x实战专题案例.用Java实现JVM.基于Ja ...

  3. Android客户端 和 pc服务器 建立socket连接并发送数据

    服务器使用java代码 1.服务端需要创建一个ServerSocket(port) 2.port(端口) 地址范围在0~65535请使用1024以上的端口,尽量偏大使用,否则可能和你主机上的其他应用程 ...

  4. C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)

    C# SuperSocket 手把手教你入门 傻瓜教程系列教程 C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据) C# SuperSocket 手把手教你 ...

  5. java tcp发消息给硬件_服务器可以使用TCP向客户端发送消息吗?

    如果您有自定义客户端(例如,不是浏览器中的Web应用程序),则可以根据需要与服务器 Build 纯TCP连接 . 但是,TCP上的每次传输都需要双方正在使用的某种数据格式(通常称为"协议&q ...

  6. php 连接socket服务器_PHP-Socket服务端客户端发送接收通信实例详解

    Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求 ...

  7. 服务器怎么向指定客户端发送信息,WebSocket 如何实现服务端向客户端发送消息?...

    我们都知道, Websocket 是一个双向的通讯方式,一般情况下,我们都是根据 Client 的情况返回信息,但是在一个更加健壮的系统,我们可能需要主动的向客户端发送消息.我试图在中文网络去搜索,查 ...

  8. python中如何导入数据包_如何在python中发送数据包?

    我尝试使用这段代码在 python中使用scapy发送数据包 data= "University of texas at San Antonio" a=IP(dst="1 ...

  9. python 服务端主动发数据_python使用socket向客户端发送数据的方法

    Python Socket通讯例子详解 创新从模仿开始! python中内置的socket模块使得网络编程更加简单化,下面就通过两个小小脚本来了解客户端如何与服务器端建立socket. 客户端代码: ...

最新文章

  1. Docker Container同时启动多服务 supervisor
  2. C#中获取指定路径下指定后缀名的所有文件的路径的list
  3. java backbone_[Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合
  4. PHP在Postman上面进行xdebug的测试
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1109:开关灯
  6. 广告中oCPX到底是如何进行优化的
  7. Oracle中视图的创建和处理方法
  8. java类验证和装载顺序_Java类加载机制实现流程及原理详解
  9. 纸板怎么切割光滑_现有的切割机如何选择呢?进来看看就清楚了
  10. stm32的ISP下载
  11. 5、依赖注入(DI)dependency injection
  12. PYTHON对接语音验证码接口API
  13. 实现调用阿里云API第二章——API调用实战(全球IP地址归属地查询)
  14. PHP长字符串表示方法
  15. 小米平板4刷入twrp
  16. 矩阵连乘 动态规划_如何构建移动营销时代的“动态矩阵”?
  17. 96-Java的打印流、打印流重定向、补充知识:Properties、commons-io框架
  18. 【计算方法】数值微积分
  19. 原码、反码、补码之间的转换和简单运算
  20. 基于Skeleton的手势识别:SAM-SLR-v2

热门文章

  1. phpmyadmin支持php7,php 7-带有phpmyadmin的PHP 7给出了很多弃用声明
  2. 网络IO模型详细分析
  3. angular.js入门基础(一)
  4. 数据结构:单链表和双向链表
  5. 标星7000+,这个 Python 艺术二维码生成器厉害了!
  6. 列表,元组,集合,字典常用方法
  7. Hive UDF 函数指南
  8. jQuery的DOM操作
  9. Tab选项卡切换效果JavaScript汇总
  10. 【差分隐私的指数机制该怎么理解?】差分隐私系统学习记录(三)