日期:2014-05-20  浏览次数:20889 次

有关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
------解决方案--------------------
你把那本书的书名和作者发上来,然后把那本书撕掉
-------------------------------------------
呵呵,顶这个

超时是要自己做的!