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