Я хочу попытаться прочитать входной поток сокета в течение определенного времени, а затем сделать что-то еще, если я не получу никаких входных данных, я знаю, что могу установить тайм-аут для сокета, который сделает это
mySocket.setSoTimeout(200);
но будет ли он по-прежнему работать (будет ли InputStream по-прежнему вызывать исключение для моего блока catch), даже если я инкапсулирую его в ObjectInputStream
public void startClient(){
try {
connection = new Socket(InetAddress.getByName(hostName), port);
output = new ObjectOutputStream( connection.getOutputStream());
output.flush();
input = new ObjectInputStream( connection.getInputStream());
}
catch (IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
ExecutorService worker = Executors.newSingleThreadExecutor();
worker.execute( this );
}
и есть ли другой способ сделать это, если это не работает. плюс, если поток начнет чтение и истечет время ожидания, он остановится в середине или будет продолжаться до тех пор, пока в потоке не останется байтов, как в: будет ли тайм-аут потока после того, как он начнет читать объект, если пройдет 200 мс?
я хочу сделать что-то вроде этого
while(!connection.isClosed()){
try{
com = (String) input.readObject();
if(com.equals("TERMINATE CONNECTION")){
closeConnection();
}else if(com.equals("SEND DATA")){
sendData();
}
}catch(timeout exception){
if( timedout and want to do something){ do something else ....}
}
com="";
}
Спасибо всем