为什么我的socket的read方法没有阻塞,直接

 我来答
雪V歌
2018-01-20 · 知道合伙人数码行家
雪V歌
知道合伙人数码行家
采纳数:78698 获赞数:222934
泉州兴瑞发公司2015-2017最佳优秀员工。

向TA提问 私信TA
展开全部
一、你调用read的时候,实际上调用的是socketchannel的read方法,而你设置的阻塞模式是ServerSocketChannel的模式,所以调用read时依然会采用默认的阻塞方式,如果你希望用非阻塞的方式,只要设置一下socketchannel的阻塞模式就OK了。二、默认情况下,read的方法是阻塞模式的,所以没有办法设置他的超时时间,如果客户端异常退出,当前的连接将永远等待下去,如果你修改成非阻塞模式就没有这个问题了,非阻塞模式你可以判断read返回值,如果超过N时间返回值一直都是0,就把当前的连接关闭。三、我并没有这样混合用过,还没遇到过这样的问题,我猜想有可能是跟关闭的socketchannel、socket等等有关吧,可能关闭socket和关闭channel有些区别,我也不确定,反正建议你,想要NIO就用NIO,要是想要serversocket和scoket,那就只用这两个,尽量不要混合使用。希望对你有帮助。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式