怎么理解Netty中的NIO阻塞通信
发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,本篇内容主要讲解"怎么理解Netty中的NIO阻塞通信",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么理解Netty中的NIO阻塞通信"吧!NIO 完成
千家信息网最后更新 2025年01月31日怎么理解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安全错误
数据库的锁怎样保障安全
网络安全自我批评
discuz 数据库字段
当服务器收到syn客户端
分页迁移数据库表mysql
电脑软件开发用什么编程语言
线上网络安全周
跨国数据库有哪些
插入数据库随机字符串
萝岗区软件开发好吗
数据库删了数据提交后还能恢复么
网络安全教育内容记录
求生之路2服务器为什么那么少
网络安全可以向哪些部门举报
虚拟机下如何搭建邮件服务器
从事软件开发的人的占比
西北核技术所 网络安全
如何获得外网数据库
网络安全宣传周以什么为主题
数据库营销教程视频
变异数据库
免费云服务器空间
关于网络安全的作文五篇
互联网黑科技类型
慈溪安卓软件开发工具
战地5哪个服务器好玩
华为服务器的配置工具
数据库linux
广州盈冲互联网科技公司
高斯数据库查询用户权限
我在软件开发中遇到最坑的事