有关java的socket连接的问题,请各位大侠支招。急等!!!
在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) {
...//这里是读写操作
}
------解决方案--------------------没遇见过,帮你顶下
------解决方案--------------------可以自己写个程序验证一下吧,设置不同的TimeOut值,看过多久会抛出
SocketTimeoutException
------解决方案--------------------你把那本书的书名和作者发上来,然后把那本书撕掉
SoTimeOut这个属性是指一次block的最大时间。每次read的block都是重新计算的
所以Socket只需要在创建后设置一次sotimeOut属性就可以了。
------解决方案--------------------同意楼上,设置一次就OK
------解决方案--------------------你把那本书的书名和作者发上来,然后把那本书撕掉
-------------------------------------------
呵呵,顶这个
超时是要自己做的!