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 :

Probléme serveur multi-thread


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 117
    Par défaut Probléme serveur multi-thread
    Bonjour à tous,

    Je réalise une petite application qui est censé transféré un fichier d'un poste à un autre. La partie serveur doit pouvoir accépter plusieurs connexions, mais lors de la connexion j'ai cette erreur qui apparait :

    Exception in thread "main" java.net.SocketException: Socket is closed
    at java.net.ServerSocket.accept(ServerSocket.java:417)
    at MultiServer.main(MultiServer.java:26)
    Socket[addr=/127.0.0.1,port=49295,localport=4444]
    Je vous fournit ci-dessous les codes de ma classe MultiThread, le code du serveur et celui des clients :

    Tout d'abord les classe permettant de réaliser le serveur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    public class MultiServerThread extends Thread 
    {
     
    	private Socket socket = null; 
     
    	public MultiServerThread(Socket soc) 
    	{
    		super("MultiServerThread");
    		this.socket = soc; 
    	}
     
    	public void run() 
    	{ 
    		try
    		{
    			System.out.println(this.socket);
    			FileOutputStream f = new FileOutputStream("la.mp3");
     			BufferedOutputStream fr = new BufferedOutputStream(f);
     			BufferedInputStream fenvoi = new BufferedInputStream(this.socket.getInputStream());
     			int octet = 0;
    			while (octet != -1 ) 
    			{
     				octet = fenvoi.read();
     				fr.write(octet);
    			}
     			fenvoi.close();
     			fr.close();
     			f.close();
    			this.socket.close();
    		}
    		catch (Exception e)
    		{
    			e.printStackTrace(); 
    		} 
    	} 
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class MultiServer 
    { 
     
    	public static void main(String[] args) throws IOException 
    	{
    		ServerSocket serverSocket = null;
     
       		boolean listening = true;
     
    		try
    		{
    			serverSocket = new ServerSocket(4444); 
    		} 
     
    		catch (IOException e) 
    		{
    			System.err.println("Could not listen on port: 4444."); 
    			System.exit(-1);
    		} 
     
    		while (listening)
    		{
    			new MultiServerThread(serverSocket.accept()).start();
    			serverSocket.close();
    		}
    	} 
    }
    Maintenant la classe du client :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    public class Client 
    {
       static final int port = 4444 ;
     
       public static void main(String[] args) throws Exception {
            Socket socket = new Socket("localhost", port);
            System.out.println("SOCKET = " + socket);
     	File fichier = new File("ici.mp3");
     	FileInputStream f = new FileInputStream(fichier);
     	BufferedInputStream fr = new BufferedInputStream(f);
     	BufferedOutputStream fenvoi = new BufferedOutputStream(socket.getOutputStream());
    	int octet = 0;
    	while (octet != -1 ) 
    	{
     		octet = fr.read();
     		fenvoi.write(octet);
     
    	}
     	fenvoi.close();
     	fr.close();
     	f.close();     
            socket.close();
       }
    }
    En ésperant des réponses, merci d'avance !

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 548
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (listening)
    {
      new MultiServerThread(serverSocket.accept()).start();
      serverSocket.close();
    }
    Quand tu fais ça, tu démarre le thread et, immédiatement après tu ferme le socket...

    Il faudrait faire (je pense)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while (listening)
    {
      new MultiServerThread(serverSocket.accept()).start();
    }
    serverSocket.close();

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 117
    Par défaut
    Merci beaucoup, le probléme vient bel et bien de là.
    thx

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/11/2006, 23h21
  2. [C++][serveur multi-threads] prob de connection
    Par Just_the_boss dans le forum C++
    Réponses: 4
    Dernier message: 23/02/2006, 19h09
  3. [Socket] un serveur multi thread
    Par mzt.insat dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 12/11/2005, 13h25
  4. Réponses: 7
    Dernier message: 19/10/2004, 19h09
  5. Réponses: 16
    Dernier message: 30/01/2004, 11h05

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