怎么理解Netty中的NIO阻塞通信
发表于:2025-12-05 作者:千家信息网编辑
千家信息网最后更新 2025年12月05日,本篇内容主要讲解"怎么理解Netty中的NIO阻塞通信",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解Netty中的NIO阻塞通信"吧!NIO 完成
千家信息网最后更新 2025年12月05日怎么理解Netty中的NIO阻塞通信
本篇内容主要讲解"怎么理解Netty中的NIO阻塞通信",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解Netty中的NIO阻塞通信"吧!
NIO 完成网络通信的三个核心:Channel、Buffer、Selector
1、通道(Channel):负责连接SocketChannel、ServerSocketChannel、DatagramChannel、Pipe.SinkChannel、Pipe.SourceChannel2、缓冲区(Buffer):负责数据的存取3、 选择器(Selector):是 SelectableChannel 的多路复用器。用于监控 SelectableChannel 的 IO 状况
1、阻塞网络通信copy数据
//客户端@Testpublic void client() throws IOException{ //1. 获取通道 SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8085)); FileChannel inChannel = FileChannel.open(Paths.get("/Users/tentsuuhou/Desktop/777.txt"), StandardOpenOption.READ); //2. 分配指定大小的缓冲区 ByteBuffer buf = ByteBuffer.allocate(1024); //3. 读取本地文件,并发送到服务端 while(inChannel.read(buf) != -1){ buf.flip(); sChannel.write(buf); buf.clear(); } //4. 关闭通道 inChannel.close(); sChannel.close();}//服务端@Testpublic void server() throws IOException{ //1. 获取通道 ServerSocketChannel ssChannel = ServerSocketChannel.open(); FileChannel outChannel = FileChannel.open(Paths.get("/Users/tentsuuhou/Desktop/666.txt"), StandardOpenOption.WRITE, StandardOpenOption.CREATE); //2. 绑定连接 ssChannel.bind(new InetSocketAddress(8085)); //3. 获取客户端连接的通道 SocketChannel sChannel = ssChannel.accept(); //4. 分配指定大小的缓冲区 ByteBuffer buf = ByteBuffer.allocate(1024); //5. 接收客户端的数据,并保存到本地 while(sChannel.read(buf) != -1){ buf.flip(); outChannel.write(buf); buf.clear(); } //6. 关闭通道 sChannel.close(); outChannel.close(); ssChannel.close();}先开启server端,在开启client端,这样就ok了
2、阻塞简单版client发送server数据
//客户端@Testpublic void client() throws IOException{ SocketChannel sChannel = SocketChannel.open(new InetSocketAddress("127.0.0.1", 8080)); ByteBuffer buf = ByteBuffer.allocate(1024); sChannel.shutdownOutput(); //接收服务端的反馈 int len = 0; while((len = sChannel.read(buf)) != -1){ buf.flip(); System.out.println(new String(buf.array(), 0, len)); buf.clear(); } sChannel.close();}//服务端@Testpublic void server() throws IOException{ ServerSocketChannel ssChannel = ServerSocketChannel.open(); ssChannel.bind(new InetSocketAddress(8080)); SocketChannel sChannel = ssChannel.accept(); ByteBuffer buf = ByteBuffer.allocate(1024); //发送反馈给客户端 buf.put("服务端接收数据成功".getBytes()); buf.flip(); sChannel.write(buf); sChannel.close(); ssChannel.close();}client中,sChannel.shutdownOutput(); 如果没有这个,处于阻塞状态,server不知道,只有shutdownOutput()才能提醒server端,这样就能把client的数据传到server中。
到此,相信大家对"怎么理解Netty中的NIO阻塞通信"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
阻塞
数据
通道
通信
客户
服务
客户端
缓冲区
缓冲
内容
大小
端的
网络
网络通信
分配
学习
实用
更深
成功
三个
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
19年网络安全征求意见
青岛昊纬网络技术有限公司
雾天调色软件开发
笨马网络技术销售工程师
关系型数据库建表规范
新奇软件开发项目创意有哪些
迈特思创数据库怎么样
数据库实体自我参照关系
宣传《网络安全法》,提升
cach数据库
广东省强网杯网络安全大赛赛题
数据库属性和码是什么意思
学习软件开发的技巧
电信公司网络安全存在的问题
司腾网络技术
数据库apache标红
松江区海航数据库服务商前景
广州粤安网络技术
桂阳app软件开发培训哪里好
视易锋云服务器系统管理软件
企业网络安全推动难点
access数据库参数查询
大学网络安全的定义
软件开发中建模有什么认识
安徽省视频会议服务器云空间
数据库可以查出用户登陆ip吗
软件开发专业职高排行榜
软件开发设计参数
华为网络安全心得体会总结
网络安全教育画框