Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1510 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Problème communication SOCKET Réseau TCP/IP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème communication SOCKET Réseau TCP/IP

n°2022177
vachkirit
Posté le 09-09-2010 à 17:48:02  profilanswer
 

Bonjour,
Je rencontre un problème aléatoire de communication entre un client et un serveur utilisant des sockets via le protocole TCP/IP en JAVA.
 
Le serveur d’écoute est multithread. Il écoute sur un port 8090 par exemple
Lorsqu’un client essaye de se connecter, il accepte la connexion et créé un thread de récupérer les informations de connexion.
 
Exemple de code utilisé pour l’écoute et l’acceptation du client :

Code :
  1. ServerSocket ss = new ServerSocket(port);
  2. while (true)
  3. {
  4. new CommunicationDaemonThread(ss.accept());
  5. }


 
La classe CommunicationDaemonThread correspond à ce thread dans lequel le flux d’entrée et de sortie du nouveau client sont définis :
 

Code :
  1. ObjectInputStream fluxIn=new ObjectInputStream(maSocket.getInputStream());
  2. ObjectOutputStream fluxOut=new ObjectOutputStream(maSocket.getOutputStream());


 
Ces flux sont stockés dans une table sur le serveur afin de pouvoir dialoguer ultérieurement avec le client.
 
La connexion client/serveur doit être permanente.  
Le client doit rester connecté en permanence au serveur.  En cas de déconnexion du client, le serveur supprime l’entrée du client dans sa table, ferme les flux de communication et la socket dédiée avec ce client.
 
Le client doit répondre à chaque demande que le serveur pourrait lui envoyer : les rôles inversés sont obligatoires par rapport à un fonctionnement client/serveur classique.
 
Requête vers un client côté serveur :
A un instant T, le serveur demande une information à un client :
Pour cela, il récupère le flux de sortie depuis sa table, puis il envoie un objet (ou des données) via le réseau :  
 

Code :
  1. ObjectOutputStream fluxOut=daemon.getObjectOS();
  2. fluxOut.writeObject(objectToSend);
  3. fluxOut.flush();


 
 
 
Le client lui attend cette demande du serveur avec le code suivant :
 

Code :
  1. ObjectInputStream fluxIn = new ObjectInputStream(sock.getInputStream());
  2. ExchangeMessage message=(ExchangeMessage)fluxIn.readObject();
  3. if (message!=null) { // traitement du message }
  4. else                { // traitement de l'erreur    }


 
A noter que le client est bloqué sur le readObject()tant qu’il n’a pas reçu une demande du serveur. (ce qui est normal)
En cas d’exception sur un de ces traitements, la connexion avec le client est supprimée.
 
Problème :
Tout fonctionne cependant, dans de très rares cas (ou sur certains ordinateurs - je n'arrive pas à déterminer la cause) la requête part bien du serveur mais n’arrive jamais  jusqu’au client  
 
Les commandes writeObject() et flush() côté serveur sont correctement exécutées mais le client ne reçoit pas les données.  (bloqué sur le readObject())
 
La socket ne retourne pas de message d’erreur et semble toujours active et fonctionnelle pour le serveur. Mais le client ne reçoit plus aucun message.
 
Dans ce cas, pour s’en sortir, il faut que le client se déconnecte totalement du serveur puis qu’il se reconnecte : création d’une nouvelle socket.
 
 
Ce mode de fonctionnement est-il dû à un mauvais paramétrage des sockets de ma part ?
 
Pourquoi java ne renvoie pas un statut correct de l’état des sockets ? (socket.isClosed() - socket.isConnected()).
 
Pourquoi est-ce que pour java, la socket semble toujours active entre le client et le serveur mais qu’elle se trouver dans un état non défini ?  
 
Avez-vous déjà rencontré ce problème ?  
Une solution pour le résoudre ?
 
Merci d'avance pour votre aide

mood
Publicité
Posté le 09-09-2010 à 17:48:02  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Problème communication SOCKET Réseau TCP/IP

 

Sujets relatifs
problème avec xcopy d'un dossierProblème d'insertion d'image sous LaTeX
Problème remplissage Form par recordsetAS3 = probleme indicateur chargement d'images multiple
probleme avec easy forum ! 2.5problème avec la fonction vlookup
Probleme avec " Adobe Flash Player "Problème lecture codes barre 2/5 entrelacés
problème réalisation tableau périodique tkinter 
Plus de sujets relatifs à : Problème communication SOCKET Réseau TCP/IP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR