client netty 主动发数据_Netty服务器无限循环给客户端发送数据
主要思路:
* 服务器每隔两秒发送一次服务器的时间
* 客户端接收服务器端数据,打印出服务器的时间
服务器端代码
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服务器无限循环给客户端发送数据相关推荐
- Netty服务器无限循环给客户端发送数据
2019独角兽企业重金招聘Python工程师标准>>> 主要思路: * 服务器每隔两秒发送一次服务器的时间 * 客户端接收服务器端数据,打印出服务器的时间 服务器端代码 packag ...
- client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...
小傅哥 | https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获.专注于原创专题案例编写,目前已完成的专题有:Netty4.x实战专题案例.用Java实现JVM.基于Ja ...
- Android客户端 和 pc服务器 建立socket连接并发送数据
服务器使用java代码 1.服务端需要创建一个ServerSocket(port) 2.port(端口) 地址范围在0~65535请使用1024以上的端口,尽量偏大使用,否则可能和你主机上的其他应用程 ...
- C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据)
C# SuperSocket 手把手教你入门 傻瓜教程系列教程 C# SuperSocket 手把手教你入门 傻瓜教程---1(服务器单向接收客户端发送数据) C# SuperSocket 手把手教你 ...
- java tcp发消息给硬件_服务器可以使用TCP向客户端发送消息吗?
如果您有自定义客户端(例如,不是浏览器中的Web应用程序),则可以根据需要与服务器 Build 纯TCP连接 . 但是,TCP上的每次传输都需要双方正在使用的某种数据格式(通常称为"协议&q ...
- php 连接socket服务器_PHP-Socket服务端客户端发送接收通信实例详解
Socket介绍 什么是socket 所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求 ...
- 服务器怎么向指定客户端发送信息,WebSocket 如何实现服务端向客户端发送消息?...
我们都知道, Websocket 是一个双向的通讯方式,一般情况下,我们都是根据 Client 的情况返回信息,但是在一个更加健壮的系统,我们可能需要主动的向客户端发送消息.我试图在中文网络去搜索,查 ...
- python中如何导入数据包_如何在python中发送数据包?
我尝试使用这段代码在 python中使用scapy发送数据包 data= "University of texas at San Antonio" a=IP(dst="1 ...
- python 服务端主动发数据_python使用socket向客户端发送数据的方法
Python Socket通讯例子详解 创新从模仿开始! python中内置的socket模块使得网络编程更加简单化,下面就通过两个小小脚本来了解客户端如何与服务器端建立socket. 客户端代码: ...
最新文章
- Docker Container同时启动多服务 supervisor
- C#中获取指定路径下指定后缀名的所有文件的路径的list
- java backbone_[Java教程]移动前端开发中的Backbone之一:Backbone中的模型和集合
- PHP在Postman上面进行xdebug的测试
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1109:开关灯
- 广告中oCPX到底是如何进行优化的
- Oracle中视图的创建和处理方法
- java类验证和装载顺序_Java类加载机制实现流程及原理详解
- 纸板怎么切割光滑_现有的切割机如何选择呢?进来看看就清楚了
- stm32的ISP下载
- 5、依赖注入(DI)dependency injection
- PYTHON对接语音验证码接口API
- 实现调用阿里云API第二章——API调用实战(全球IP地址归属地查询)
- PHP长字符串表示方法
- 小米平板4刷入twrp
- 矩阵连乘 动态规划_如何构建移动营销时代的“动态矩阵”?
- 96-Java的打印流、打印流重定向、补充知识:Properties、commons-io框架
- 【计算方法】数值微积分
- 原码、反码、补码之间的转换和简单运算
- 基于Skeleton的手势识别:SAM-SLR-v2