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

  FORUM HardWare.fr
  Programmation
  Java

  Problème de sockets

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de sockets

n°711598
Predicator
Posté le 29-04-2004 à 11:05:25  profilanswer
 

Bonjour,
 
j'ai développé un serveur en C++ qui reçoit des requêtes en Java.
Le serveur tourne sous Linux, et Java on s'en fout un peu :)
 
le problème est que quand je fais tourner le client sous Windows, tout se passe bien :à la fin de chaque requête, les sockets sont bien fermées, mais quand je fais tourner le client sous UNIX/Linux, rien ne va plus : toutes les sockets passent en TIME_WAIT et au bout de 5 requêtes, le serveur plante (Broken Pipe).
 
je pense que ça vient d'une interprétation différente du code Java en fonction de la plateforme. Vous avez une idée ? parce que là je ne sais plus trop quoi faire...
 
Merci

mood
Publicité
Posté le 29-04-2004 à 11:05:25  profilanswer
 

n°711609
gfive
Posté le 29-04-2004 à 11:17:18  profilanswer
 

euuh....qu'est-ce que tu veux dire par "qui reçoit des reqûetes en Java"???

n°711612
Predicator
Posté le 29-04-2004 à 11:24:33  profilanswer
 

le client est en java, c'est tout ce que ça veut dire [:spamafote]  
ce qui est envoyé, c'est du bête texte...

n°711891
Predicator
Posté le 29-04-2004 à 15:25:42  profilanswer
 

en passant le serveur en Java, y'a toujours le problème :o  
 
voilà le code succint du serveur :
 

Code :
  1. ServerSocket serverSocket = null;
  2. try {
  3. serverSocket = new ServerSocket();
  4. serverSocket.setReuseAddress(true);
  5. serverSocket.bind(new InetSocketAddress(port));
  6. } catch (IOException e) {
  7. System.err.println("Could not listen on port: " + port);
  8. System.exit(1);
  9. }
  10. while (true) {
  11. Socket clientSocket = null;
  12. try {
  13.  System.out.println("Listening..." );
  14.  clientSocket = serverSocket.accept();
  15.  PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
  16.  BufferedReader in = new BufferedReader(new  InputStreamReader(clientSocket.getInputStream()));
  17.  //int nbChar = Integer.parseInt(in.readLine());
  18.  System.out.println("Réception d'une requête" );
  19.  String requete = in.readLine();
  20.  System.out.println(">>> " + requete);
  21.  /*
  22.  Traitement de la requête
  23.  */
  24.  out.write(resultat + "\n" );
  25.  out.flush();
  26.  System.out.println("Déconnexion en cours..." );
  27.  out.close();
  28.  in.close();
  29.  clientSocket.close();
  30.  System.out.println("Déconnecté" );
  31.  current = (current + 1) % nbMax;
  32. } catch (IOException e) {
  33.  System.err.println("Accept failed." );
  34.  System.exit(1);
  35. }
  36. }


 
et voilà le code du client  
 

Code :
  1. Socket socket = new Socket();
  2. socket.setReuseAddress(true);
  3. socket.connect(new InetSocketAddress(dhost, dport));
  4. System.out.println("Connecté" );
  5. System.out.println("Récupération du tunnel de communication" );
  6. BufferedReader in = new BufferedReader(new InputStreamReader(routeur.getInputStream()));
  7. BufferedWriter out = new BufferedWriter(new OutputStreamWriter(routeur.getOutputStream()));
  8. System.out.println("Tunnel OK" );
  9. System.out.println("Envoi de la requête" );
  10. out.write(requete.length() + " " + requete + "\n" );
  11. out.flush();
  12. System.out.println("Réception de la réponse" );
  13. resultat = Integer.parseInt(in.readLine());
  14. System.out.println("Réponse OK" );
  15. System.out.println("Déconnexion..." );
  16. in.close();
  17. out.close();
  18. routeur.close();
  19. System.out.println("Déconnecté" );


 
voilà, c'est quasiment le code qu'on trouve sur le tutorial de SUN, ça marche nickel quand le client tourne sous windows, mais quand le client tourne sous Linux, ça marche pas... toutes les connexions passent en TIME_WAIT, et quand on atteinte le maximum du système, y'a crash du serveur...

n°712030
Predicator
Posté le 29-04-2004 à 16:46:38  profilanswer
 

c'est bon les gars laissez tomber, les petits pères du forum SUN ne se touche pas le nombril en se la jouant devant les n00bs :o

n°712058
seabee
Posté le 29-04-2004 à 17:09:39  profilanswer
 

Predicator a écrit :

c'est bon les gars laissez tomber, les petits pères du forum SUN ne se touche pas le nombril en se la jouant devant les n00bs :o


 
Sodo-gravier-ban
 [:b-s]

n°712066
Predicator
Posté le 29-04-2004 à 17:15:02  profilanswer
 

n'empêche c'est marrant de voir que quand c'est une question technique y'a personne, mais pour sortir des trolls, là ça y va :o

n°712502
benou
Posté le 30-04-2004 à 08:31:11  profilanswer
 

Predicator a écrit :

n'empêche c'est marrant de voir que quand c'est une question technique y'a personne, mais pour sortir des trolls, là ça y va :o


Ce genre de remarques, t'es sympa, tu t'en passes ...
 
Et je remarque que tu n'expliques pas la solution ... Sympa pour les autres qui auront le même problème plus tard ...

n°712607
Predicator
Posté le 30-04-2004 à 10:19:20  profilanswer
 

le TIME_WAIT fait partie du protocole TCP/IP, et on ne peut pas s'en débarrasser. si on tombe sur un tel problème, il faut revoir son design, car il n'y a pas d'autre solution. le fait que ça marche sous Windows est parce qu'il y a un bug d'implémentation des sockets dans la JVM de SUN pour Windows...

n°712758
Taz
bisounours-codeur
Posté le 30-04-2004 à 13:41:53  profilanswer
 

\n -> \r\n


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

  Problème de sockets

 

Sujets relatifs
Probleme avec un selectProbleme permutation ligne tableau
[PHP]Problème d'insertion bizarre [resolu]problème avec les threads (associés aux sockets) sous windows
Problème de sockets ouverts[C/C++] Sockets en UDP, problème d'envoi à une IP
[PERL/C/SOCKETS] Problème de sockets en PERL[Delphi] ptit probleme avec les sockets
[C++] Sockets : Problème serveur[C++] Sockets : Problème de client
Plus de sujets relatifs à : Problème de sockets


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