IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Détecter Socket server side closed


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 93
    Par défaut Détecter Socket server side closed
    bonjour,

    Je travaille sur eclipse avec les threads et les sockets
    J'ouvre une connection socket avec un serveur et j'envoie et je récupère des données.
    Quand le serveur perd le connection réseau, le client revoie l'erreur suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Exception d'E/S: Software caused connection abort: socket write error
    Je veux savoir comment détecter que le serveur est déconnecté et boucler en attendant le reconnection du serveur
    puis lancer de nouveau la socket(dans ca cas comment se débarasser des threads anciennemnt crées??)

    creation socket:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Socket socket = new Socket(ServerAdresse,NumPort);
    réception données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char[] Buffer = null;  
    InputStream inputStream = socket.getInputStream();
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    while(true){
    	buffer = new char[inputStream.available()];
    	if (buffer.length != 0){
    		reader.read(buffer, 0 , buffer.length);
    	}
    }
    envoie données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DataOutputStream out =  new DataOutputStream(socket.getOutputStream());
    out.writeUTF(msg);
    Merci.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    c'est à ça que sert le bloc try { } catch (IOException e) {....} que tu es censé avoir quelque part dans ton code. Dans le bloc Exception tu peux traiter l'erreur et prendre les mesures que tu juge utile.

  3. #3
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 93
    Par défaut
    merci tchize_ pour ta réponse.
    la question maintenant est de savoir quand le serveur reprend connection et comment lancer de nouveau la socket si je suis dans le bloc try catch.comment sortir de l'exception et continuer le traitement?

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Typiquement, ton code peux ressembler à ça


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public void dialoguer(String serveur) {
      boolean fini = false;
      while(!fini){
        try {
         // travail avec la socket, peux lancer une exception
         // connecter
         // envoyer les données
         fini = true;
        } catch (IOException e) {
          //traiter l'erreur, nettoyer ce qui doit l'être, éventuellement mettre un sleep pour laisser le temps au serveur de redémarrer
          throw new TonApplicationException(e);
        }
      }
    }

    Il y a plein de manière de faire dépendant de la complexité du dialogue que tu as avec le serveur. Dans tous les cas, pour détecter que le serveur est à nouveau disponible, il faut essayer de 's'y connecter, pas d'autre manière de faire.

Discussions similaires

  1. [C/C++]Socket Server/Client
    Par X-K4l1 dans le forum Développement
    Réponses: 5
    Dernier message: 03/12/2013, 12h08
  2. [Socket] server closed exception, readLine()
    Par ceres02 dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 22/06/2007, 18h25
  3. [AJAX] Annuler une requête asynchrone server side
    Par Matthieu Bissat dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/01/2007, 20h42
  4. Server side proxy
    Par NR dans le forum ASP
    Réponses: 2
    Dernier message: 27/09/2006, 15h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo