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

  FORUM HardWare.fr
  Programmation
  Java

  Socket et Threads

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Socket et Threads

n°997746
SHiSo
Posté le 01-03-2005 à 23:49:44  profilanswer
 

Bonsoir,
 
j'ai un petit soucis avec une exception dans l'implémentation d'un serveur.Voici le code:
 
- le serveur
 
    while(true){
  clientSocket = serverSocket.accept();
 
  System.out.println("Connexion de "+ clientSocket.getInetAddress().getHostName());
 
  // Création du thread
  (new HttpRequest(clientSocket)).start();
  clientSocket.close();
     }

 
- le thread
 
public class HttpRequest extends Thread{
    private Socket connexion = null;
     
    public HttpRequest(Socket clientSocket){
 System.out.println("Entrée dans Thread\n" );
 this.connexion = clientSocket;
 
    }
    public void run(){
 String input = null;
 BufferedReader in = null;
 PrintWriter out = null;
 
 try{
     in = new BufferedReader(
       new InputStreamReader(connexion.getInputStream()));
     out = new PrintWriter(connexion.getOutputStream(),true);
 }
 catch (IOException e) {
     System.out.println("Erreur flux Input et Output du socket: " + e);
 }
 
................

 
et l'erreur à la suite de l'initialisation des variables in et ou
 
Erreur flux Input et Output du socket: java.net.SocketException: Socket is closed
java.lang.NullPointerException
        at HttpRequest.run(HttpRequest.java:46)

 
Je ne comprend pas pourquoi il me sort cette exception.
Si qq1 voit l'erreur :)
 
thx
SHiSo

mood
Publicité
Posté le 01-03-2005 à 23:49:44  profilanswer
 

n°999853
mordicator
Posté le 03-03-2005 à 17:07:34  profilanswer
 

Bon, je suis un peu rouille en Java, mais je ne pense pas me tromper...
 
Dans ton code cote serveur, tu acceptes la connexion cliente, tu crees un nouveau thread auquel tu passe la connexion; a partir de la, le thread vit sa vie, mais le serveur aussi. Et la c'est le drame, tu fermes la connexion cote serveur.
Resultat, meme si ton thread a un objet clientSocket valide, la connexion sous-jacente a ete fermee par le serveur...
 
Resultat, retire la ligne "clientSocket.close();" de ton code serveur et laisse la gestion de cette action au thread vu que tu lui delegue justement la gestion de la connexion.
 
Si ton applis doit gerer un grand nombre de connexion, n'hesite pas a faire appel a un pool de thread plutot que d'en creer un nouveau a chaque fois et eventuellement crees un thread special pour 'nettoyer' les connexions en fin de vie (en gros qui se charge de fermer les sockets)
 
Je ne pense pas t'avoir induit en erreur, mais si c'est le cas, desole ;)


Message édité par mordicator le 03-03-2005 à 17:09:23
n°1001212
yo c spi
Yo !
Posté le 04-03-2005 à 19:29:20  profilanswer
 

Il faut que tu ferme le socket uniquement apres avoir fini l'envoi de données demandées par la requete.


---------------
J.C. Farinet

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

  Socket et Threads

 

Sujets relatifs
[Java] ObjectInputStream (socket.getInputStream()) bloquant !connexion par socket via XML
Problème de reception socketProblème socket UDP
[Perl] Probleme de fork & serveur sockettransfert de fichier socket client-serveur
Socket Client+Serveur MultiThread[c#] lire plusieurs lignes sur une socket ?
[openGl] threads[C / Linux] Jeu bataille navale avec Socket
Plus de sujets relatifs à : Socket et Threads


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