Passage 1.3.1 à 1.4.2 : question socket

Passage 1.3.1 à 1.4.2 : question socket - Java - Programmation

Marsh Posté le 27-10-2004 à 09:51:10    

J'ai crée 2 petites classes (Client et Server) pour faire un test:  
Je voulais voir le comportement du server lors de l'arrachage du cable réseau d'un coté ou de l'autre.
voici les 2 classes :
Server.java

Code :
  1. private void listen() {
  2.         while(!stop) {
  3.       try {
  4.              this.serverSocket = new ServerSocket(port);
  5.              System.out.println( "Ecoute de connexion admin  sur le port: "+port);
  6.        this.serverSocket.setSoTimeout(10000);
  7.        this.socket = this.serverSocket.accept();
  8.        while (true){
  9.     byte[] b = new byte["SEND".getBytes().length];
  10.     b = "SEND".getBytes();
  11.     System.out.println("#################" );
  12.     socket.getOutputStream().write(b);
  13.     socket.getOutputStream().flush();
  14.        }
  15.             //closeConnexion();
  16.   } catch(SocketException e) {
  17.      e.printStackTrace();
  18.      closeConnexion();
  19.         } catch(Exception e) {
  20.           e.printStackTrace();
  21.        closeConnexion();
  22.           }
  23.         }
  24.     }
  25. public static void main(String args[]){
  26.  new Server().listen();
  27. }


 
 
Client:

Code :
  1. private static void connectAndReceive(String address) {
  2.         boolean isConnected = false;
  3.         //connect
  4.         while (!isConnected ){
  5.           try {
  6.                 socket = new Socket(               InetAddress.getByName(address), 6668);
  7.                 isConnected  = true;
  8.             }
  9.             catch (IOException ioEx) {
  10.    System.out.println("Erreur lors de l'etablissement de la connexion avec le dispatcher : " + ioEx.toString());
  11.           try {Thread.sleep(2000);
  12.           }
  13.           catch (InterruptedException iEx) {
  14.        System.out.println("Erreur lors de la temporisation : " + iEx.toString());
  15.           }
  16.             }
  17.         }
  18.  System.out.println("connect="+isConnected);
  19.         //listen
  20.         boolean listen =  true;
  21.         while (listen){
  22.   try {
  23.    BufferedInputStream stream_ = new BufferedInputStream(socket.getInputStream());
  24.    byte[] bloc = new byte[4];
  25.    int nc = stream_.read(bloc, 0, bloc.length);
  26.    System.out.print(nc);
  27.    if (nc>-1) System.out.print(new String(bloc, 0, nc));
  28.   }
  29.   catch (IOException ioEx) {
  30.    ioEx.printStackTrace();
  31.    listen = false;
  32.   }
  33.         }
  34.     }
  35. public static void main(String[] args){
  36.  new Client().connectAndReceive(args[0]);
  37. }


 
Quelque soit la version du jdk utilisée pour la compilation et l'exéction, le serveur ne détecte rien, il atrrete d'écrire sans faire d'exception, coté client, c'est pareil.
Vous savez s'il y a moyen de détecter l'arrachage de cable?
 
Merci

Reply

Marsh Posté le 27-10-2004 à 09:51:10   

Reply

Marsh Posté le 27-10-2004 à 10:00:15    

c'est pas normal, normalement, l'OS le détecte (au niveau physique) et ferme la socket.
 
D'autre part, tu dois avoir un tiemout à 120s dû à TCP.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 27-10-2004 à 10:04:41    

Ah j'ai pas fait de test de plus de 120 secondes. j'y go.
Sinon l'OS, c'est du Red Hat 3.0 ES.

Reply

Marsh Posté le 27-10-2004 à 10:57:20    

La déconnexion est détectée au bout de plus d'un 1/4 d'heure...
c beaucoup trop...

Reply

Marsh Posté le 27-10-2004 à 23:45:32    

et c'est quoi le rapport avec la choucroute du titre? [:kiki]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 28-10-2004 à 01:39:23    

c'est normal, avec que des communications bloquantes, quand y a un blème, tout le monde bloque, jusqu'à que l'OS gueule.
 
C'est comme ton serveur : pour pouvoir l'arrêter, t'es obligé d'attendre une nouvelle connexion ... bref ça se finit toujours à coup de SIGINT ...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed