为什么会读超时???(300分)

  • 主题发起人 主题发起人 yijin
  • 开始时间 开始时间
Y

yijin

Unregistered / Unconfirmed
GUEST, unregistred user!
以下一段程序是连接server的,然后接收信息。有些前面的定义忽略。
public void run(){
String str=new String();
try{
int count;
byte data[]=new byte[500];
connection.setSoTimeout(7000);
input=connection.getInputStream() ;
while(true){
while ((count=input.read(data))!=-1 ){
str = new String(data, 0, count);
Label1.setText(Integer.toString(count));
}
}
}
catch(Exception e){System.out.println(e);
}
}
label显示count=500
报错:java.net.SocketTimeoutException: Read timed out
但是我telnet那服务器的端口,确实接受到信息的啊。
 

你的外循环导致客户端其不停地读,当有某次read时,而服务端没有那么多的数据返回到
该Socket,read会阻塞,
而你设置了socket的timeout
>> connection.setSoTimeout(7000);
因此同其相连的read将最多阻塞7秒钟,然后抛出TimeOut异常
通常该异常给你一个是否结束线程的机会,避免无限循环中的read阻塞而无法退出

 
setSoTimeout()会导致一个和socket关连的inputStream的read()调用被阻塞,
所以,你调用完setSoTimeout()之后,就调用getInputStream()就会导致超时!
你可以试着将setSoTimeout()放在getInputStream()后面看看会不会继续保错?![:D]
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
806
import
I
后退
顶部