在socket连接中,使用setSoTimeout()方法可以设置超时。
我现在有个困惑,我今天查资料时,有人说超时的判断是累计式的,一次设置后,每次调用引起的阻塞时间都从该值中扣除,直至另一次超时设置或有超时异常抛出。比如,某种服务需要三次调用read(),超时设置为1分钟,那么如果某次服务三次read()调用的总时间超过1分钟就会有异常抛出,如果要在同一个Socket上反复进行这种服务,就要在每次服务之前设置一次超时。
真的是这样吗,不是说每次的超时时间都是同一个setSoTimeout的值,难道是没读写一次都要重新再设置一次?如果真的如上所言的话,那么需要在什么时候再重新设置超时时间。因为我看见java文档上面说,这个设置必须在进入阻塞操作前被启用才能生效,这句话我真是很难理解。如我下面的代码来说,应该在什么地方进行重新设置超时时间?
srvSocket = new ServerSocket(LISTEN_PORT);
Socket sock = srvSocket.accept(); 
sock.setSoTimeout(5000);
Bin = new BufferedInputStream(sock.getInputStream());
Bout = new BufferedOutputStream(sock.getOutputStream());while ((read = Bin.read(bb)) != -1) {
...//这里是读写操作}