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»