这是对的吗?或者我在这里做错了什么?
将超时设置为,
client.setSoTimeout(1000); // timeout after READ_SlEEP if the socket is idle
Thread.sleep(2000);
从套接字中读取
public String receive(){
inStream = telnetCreator.getInputStream(client);
int buff;
String MessageReceived ="";
try{
if (inStream.available() > 0){
buff = inStream.read();
MessageReceived += (char) buff;
System.out.println(MessageReceived);
}
}catch (Exception e){
System.out.println("MessageReceived :- "+ MessageReceived);
return MessageReceived;
}
return MessageReceived;
}
由于我将超时设置为1000毫秒然后休眠2000毫秒,因此套接字会抛出异常,因为读取时的计时器已经超时。 这非常令人恼火。所以现在我必须在使用receive之前设置超时,然后在每次接收后清除超时?
答案 0 :(得分:0)
soTimeout
从你打电话的那一刻开始滴答作响?
没有。它从您执行读取的那一刻开始计时。
因为我将超时设置为1000毫秒,然后休眠2000毫秒
为什么呢?完全浪费时间,确切地说。
套接字抛出异常,因为读取时的计时器已经超时。
不,它会抛出异常,因为从您调用read()
的那一刻起,在一秒钟的超时期间没有收到任何数据。
这非常令人恼火。
这是非常愚蠢的代码。移除睡眠并将超时延长到逼真的状态。一秒钟的数量级对于读取超时来说太小了
所以现在我必须在使用receive
之前设置超时
没有
然后在每次收到后清除超时?
没有