ReadObject() не генерирует исключение, когда сокет внезапно закрывается удаленным сервером. Это нормально?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 ReadObject() не генерирует исключение, когда сокет внезапно закрывается удаленным сервером. Это нормально?

Сообщение Anonymous »

Я думал, что когда клиент ожидает Java-объекта от сервера с помощью readObject, если сервер выключится, это вызовет исключение IOException на клиенте. Но этого не происходит, даже если сервер умирает, клиент не знает об этом и продолжает бесконечно ждать readObject.
Если такое поведение нормально, я бы хотел, чтобы какой-нибудь эксперт сказал мне, есть ли проблема способ моделирования, зная, когда сервер умер, чтобы я мог повторно подключиться к нему, когда он оживет.
Если смерть сервера вызывает исключение на клиенте, я хотел бы помочь выяснить, почему я не получаю это поведение (я собираюсь сумасшедший).
Я оставляю код ниже. Спасибо.
@Override
public void run(){
QueryCommunicationObject qcoRecibido;

while(true){

try {

qcoRecibido=(QueryCommunicationObject) SmartSecretary.getSocketAltasOis().readObject();

// Comprobamos que está correctamente firmado
if( SmartSecretary.getFirmaPublicaAltas().comprobar(QueryCommunicationObject.qcoToByteArrayPreSignature(qcoRecibido), qcoRecibido.getSignedHash()) ){

// Comprobamos que nos envía el QCO el servidor de altas
if(Arrays.equals(qcoRecibido.getDireccionOrigen(),SmartSecretary.getDireccionPublicaAltas())){

if(qcoRecibido.getTipo()==8){ //

SmartSecretary.getDireccionesAutorizadas().add(new OriginAddressWrapper(qcoRecibido.getDocumento()));

}else if(qcoRecibido.getTipo()==7){ // Eliminación de usuario autorizado

// Eliminamos al usuario

// en Documento mapeamos la direccion origen a ser eliminada
SmartSecretary.getDireccionesAutorizadas().remove(new OriginAddressWrapper(qcoRecibido.getDocumento()));

}else{
System.out.println("$$$$$$ Recibido QCO Indebido con servidor de altas, Tipo:"+qcoRecibido.getTipo());

}else{
logger.log(Level.INFO, "$$$$$$ SecretaryAltasQCOListener: ServidoRecibido QCO bien firmado pero desde una IP distinta al servidor de altas");

}

}else{ // Si recibimos un QCO mal firmado
System.out.println("$$$$$$ QCO con el ACK Mal firmado por Servidor de altas:");
}

} catch (IOException ex) {
logger.log(Level.SEVERE, "$$$$$$ Error IO de en socket con el Servidor de Altas:"+ex.getMessage());

// Iniciamos la reconexión

try {

SmartSecretary.getSocketAltas().close();

} catch (Exception ex1) {
logger.log(Level.SEVERE, "$$$$$$ Se cierra el hilo por error de I/O con el servidor de Altas:"+ex1.getMessage());

}

// Necesaria por si somos llamados ante una reconexión, evitamos que antes de acabar de ejecutarnos otros posibles threads intenten
// enviar por un socket que no existe

SmartSecretary.setSocketAltas(null);

new SecretaryAltasIniciateCommunication().start();

System.out.println("$$$$$$ SecretaryAltasIniciateCommunication: CREAMOS UNA NUEVA INSTANCIA PARA RECONECTAR desde SecretaryAltasQCOListener");

// Dejamos que termine el hilo
break;
} catch (ClassNotFoundException ex) {
logger.log(Level.SEVERE, "$$$$$$ No se ha recibido un objeto QCO válido, desde el Servidor de Altas:"+ex.getMessage());

} catch (Exception ex){ // Añadida porque en pruebas me dio una excepción RuntimeException en teoría corregida por Oracle. Tambien una
// NullPointerException

logger.log(Level.SEVERE, "$$$$$$ SecretaryAltasIniciateCommunication: Ha llegado excepci\u00f3n no capturada. Mensaje:"+ ex.getMessage());

}

}

System.out.println("$$$$$$ SecretaryAltasQCOLIsterner: I DIE:");

}


Подробнее здесь: https://stackoverflow.com/questions/792 ... sed-by-the
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»