Bonjour.
Dans une application java client-server, un seul et unique client se connecte sur deux liens (sockets) au seul et unique serveur.
Si le serveur tombe je voudrai que le client attende qu'il redémarre et se reconnecte une fois redémarrer afin qu'il continue d'envoyer des messages.
Si le client tombe je voudrais que le serveur soit capable de l'accueillir de nouveau.
Je suis en train de galérer avec les exceptions du genre voir ci-dessous (pour le client). Ce code en gros écoute et lit en permanence ce qui arrive par l'une des deux sockets. Si on ne peut pas lire ce qui arrive, alors je considère le client déconnecté, je ferme sa socket et j'attends de la rouvrir dès que le serveur m'aura fait signe. Mais ça ne marche pas. Quand le serveur refait signe j'ai une 30aines de "Connection lost on port" puis régulièrement "No server is listening", alors qu'il est lancé.
Quelqu'un peut m'aider ?
Mon code :
public void run() {
boolean connected = true;
// Reading all incoming data
while (true) {
try {
while (true) {
// Reading incoming data on transferLink and printing it
String lecture;
while ((lecture = in.readLine()) != null) {
System.out.println(lecture);
}
}
} catch (SocketException e) {
System.err.println("ReceiveFile: connection lost on port "
+ sReceiveFile.getPort());
connected = false;
} catch (IOException e) {
System.err.println("ReceiveFile: Impossible to read from port "
+ sReceiveFile.getPort());
} finally {
try {
sReceiveFile.close();
while (!connected) {
sReceiveFile = new Socket("127.0.0.1", 8562);
connected=true;
}
} catch (ConnectException e) {
System.err.println("ReceiveFile: No serveur is listening. Retrying...");
try {
Thread.sleep(8000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Configuration: Windows XP
Firefox 2.0.0.2