问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Java NIO Socket基础问题,望热心的高手解答!

发布网友 发布时间:2022-05-01 15:37

我来回答

2个回答

热心网友 时间:2023-10-22 09:36

1客户端和服务器肯定是用的自己的Selecot,这个是单独的,一边一个,没有关系。
2write不需要注册事件,注册事件是为了程序不阻塞,write方法不是阻塞的,啥时候写都没问题,读需要因为读是阻塞的,如果直接read,没有信息来,就会阻塞,为了不阻塞,NIO就是为了这个,所以又了监听,只有知道有数据来了,再去读,那么肯定就能读。这个监听只是提供了一个触发机制,“(不太明白这里我还没注册WRITE事件怎么就可以写了)”其实你都不注册,读写也是可以进行的,不过,内样读就是阻塞的,不是NIO的机制了。

最后的这个只看你说的不知道原因,方便的话,可以给代码看看吗

热心网友 时间:2023-10-22 09:36

当对方关闭时,你的 readable 事件可能有在几秒钟内一直收到,但却无法读取到任何内容,大概是因为这个时候却收到的只是状态变量,是系统的包,不是应用程序的数据包。

你在 channel.read(buf) 得到 count = -1 就表示对方关闭了,所以这时你需要停下来,否则会进行一个大约几秒钟的快速循环中,直到收到一个 IOException 停下来。

另外的 write 事件基本上有连接稳定时会一直触发,所以你只需要在有数据要写出时才写,否则 Thread.currentTread().yield() 放弃当前的时间片。

热心网友 时间:2023-10-22 09:36

1客户端和服务器肯定是用的自己的Selecot,这个是单独的,一边一个,没有关系。
2write不需要注册事件,注册事件是为了程序不阻塞,write方法不是阻塞的,啥时候写都没问题,读需要因为读是阻塞的,如果直接read,没有信息来,就会阻塞,为了不阻塞,NIO就是为了这个,所以又了监听,只有知道有数据来了,再去读,那么肯定就能读。这个监听只是提供了一个触发机制,“(不太明白这里我还没注册WRITE事件怎么就可以写了)”其实你都不注册,读写也是可以进行的,不过,内样读就是阻塞的,不是NIO的机制了。

最后的这个只看你说的不知道原因,方便的话,可以给代码看看吗

热心网友 时间:2023-10-22 09:36

当对方关闭时,你的 readable 事件可能有在几秒钟内一直收到,但却无法读取到任何内容,大概是因为这个时候却收到的只是状态变量,是系统的包,不是应用程序的数据包。

你在 channel.read(buf) 得到 count = -1 就表示对方关闭了,所以这时你需要停下来,否则会进行一个大约几秒钟的快速循环中,直到收到一个 IOException 停下来。

另外的 write 事件基本上有连接稳定时会一直触发,所以你只需要在有数据要写出时才写,否则 Thread.currentTread().yield() 放弃当前的时间片。

热心网友 时间:2023-10-22 09:36

1客户端和服务器肯定是用的自己的Selecot,这个是单独的,一边一个,没有关系。
2write不需要注册事件,注册事件是为了程序不阻塞,write方法不是阻塞的,啥时候写都没问题,读需要因为读是阻塞的,如果直接read,没有信息来,就会阻塞,为了不阻塞,NIO就是为了这个,所以又了监听,只有知道有数据来了,再去读,那么肯定就能读。这个监听只是提供了一个触发机制,“(不太明白这里我还没注册WRITE事件怎么就可以写了)”其实你都不注册,读写也是可以进行的,不过,内样读就是阻塞的,不是NIO的机制了。

最后的这个只看你说的不知道原因,方便的话,可以给代码看看吗

热心网友 时间:2023-10-22 09:36

当对方关闭时,你的 readable 事件可能有在几秒钟内一直收到,但却无法读取到任何内容,大概是因为这个时候却收到的只是状态变量,是系统的包,不是应用程序的数据包。

你在 channel.read(buf) 得到 count = -1 就表示对方关闭了,所以这时你需要停下来,否则会进行一个大约几秒钟的快速循环中,直到收到一个 IOException 停下来。

另外的 write 事件基本上有连接稳定时会一直触发,所以你只需要在有数据要写出时才写,否则 Thread.currentTread().yield() 放弃当前的时间片。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...赵高指鹿为马、燕昭王以千金买千里骨马、田忌赛马的故事!_百度... 什么是草花? 草花是怎么用的? Rio和锐澳是一家吗 锐澳公司介绍 暧昧期间出去吃饭应该谁买单啊? 一般女方出走几天男方能起诉离婚 女生戴什么水晶手链好1992年出生的 送女生手链时怎么说才浪漫(蓝水晶),就比如像钻石是女人最好的朋友之类... 新民晚报杯足球赛市级总赛事组委会电话 如何将word里的表格旋转90度。 东市卫浴和箭牌卫浴哪个好? 怎样将WORD里的表格旋转90度,如图.? 离婚的抚养费怎么规定的 求助:如何将word中的表格旋转90度? 离婚时孩子抚养费范围是怎样的? 离婚后抚养费的标准是什么 最近很多人用东澜洗衣液,都说东澜洗衣液好,你们用过吗? 男女离婚孩子抚养费标准是怎样的? word中制作的表格如何旋转? 离婚抚养费的法律规定是什么? 离婚后抚养费法律规定 捷科和东良那个牌子质量比较好 东南汽车是什么牌子 用东字取个女装店名 婵真,TFS,skinfood三个牌子的化妆品我该用哪个? 北京东用科技有限公司怎么样? 成功商标注册后需要缴费吗 通过网上申请系统在线提交的马德里商标国际注册申请,如何缴纳规费? 我王者荣耀在实名认证的时候,身份证,名字都填了,告诉我,手q不同,我明明QQ登入的和王者的是一致的? java的nio异步通信的原理 怎么样才可以在百度里找到自己 怎么才可以在百度里面搜着自己? 请问法院规定离婚赔偿子女抚养费标准是怎样的 介绍一下Java NIO,NIO读取文件都有哪些方法 离婚时子女抚养费的标准是怎样的 离婚后抚养费按照什么标准 离婚协议中的抚养费标准是多少? 民法典规定离婚后孩子的抚养费标准是多少 重庆哪家拍个人写真、简单、大方、时尚、个性的工作室? 如何在百度里面搜索到自己 连衣裙优雅浪漫,如何搭配鞋子才能时尚又好看? 在重庆江北区有哪些摄影店能够拍摄个人写真? 今年,想去拍个人写真,重庆哪家比较好,云端怎么样? 短裙是女人比较偏爱的裙装之一,搭配哪些鞋子会显得性感? 离婚抚养费的标准具体是多少 连衣裙很显温柔,搭配什么鞋子更加好看? 民法典对离婚后孩子抚养费的规定是什么 重庆那家拍个人艺术照片好 平安银行信用卡被停用还欠6000没还怎麼办