有关java的socket连接的问题,请各位大侠支招。急等!!!

javer_bin 2007-07-16 06:57:00
在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) {
...//这里是读写操作





...全文
355 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yanhan0615 2007-07-25
  • 打赏
  • 举报
回复
你把那本书的书名和作者发上来,然后把那本书撕掉
-------------------------------------------
呵呵,顶这个

超时是要自己做的!
sureyor 2007-07-25
  • 打赏
  • 举报
回复
同意楼上,设置一次就OK
fool_leave 2007-07-25
  • 打赏
  • 举报
回复
你把那本书的书名和作者发上来,然后把那本书撕掉
SoTimeOut这个属性是指一次block的最大时间。每次read的block都是重新计算的

所以Socket只需要在创建后设置一次sotimeOut属性就可以了。
empireconquer 2007-07-25
  • 打赏
  • 举报
回复
可以自己写个程序验证一下吧,设置不同的TimeOut值,看过多久会抛出SocketTimeoutException
iori97king 2007-07-18
  • 打赏
  • 举报
回复
没遇见过,帮你顶下

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧