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 :

Probleme de time out


Sujet :

Entrée/Sortie Java

  1. #1
    Membre éclairé
    Inscrit en
    Juin 2006
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 258
    Par défaut Probleme de time out
    bonjour,

    Jai un programme serveur et un programme client en java qui doivent discuter entre eux. Le pb c'est que la discussion n'est pas au point. Mon client doit envoyer des données au serveur, puis le serveur en envoyer d'autres.

    Le pb c'est que le serveur n'arrive meme pas a lire les données envoyées du client.
    Voici du code:

    Appli 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
    public class Server {
     
     public static final int port=12345;
     
     private ServerSocket server;
     
     	public Server(){
     
     		try {
     		   server=new ServerSocket(port);
     		   while (true) {
     		    //création de nouvelles connexions
     		    Socket s=server.accept();
     		    new Connection(s);
     		   } 
     		 } catch (IOException e) {
     		   System.out.println("Error when creating Socket object: "+e.getMessage());
     		   System.exit(1);
     		  }
     	}
    }
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    package server;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.Socket;
     
     
     
    public class Connection {
     
    	 private Socket client;               //link with client
         private BufferedReader fromClient; //receive request 
         private PrintWriter toClient;      //send answer
         private TreatClientRequest treatClientRequest;
    	private ExecuteCommandClearCase execCCcmd;
    	StringBuffer buf=new StringBuffer();
     
        public Connection(Socket client) {
        	 System.out.println("connection accepted...");
             this.client=client;
     
             try {
              // flow creation from/to client
              fromClient=new BufferedReader(
                new InputStreamReader(client.getInputStream())); 
              toClient=new PrintWriter(
               new BufferedWriter(
               new OutputStreamWriter(client.getOutputStream())));
     
     
              System.out.println("lecture de la requete du client:");
              readClientRequest(buf,fromClient);
              //afficher la requete du client:
              System.out.println("requete client\t"+buf+"\nfin req client");
     
              System.out.println("yo! VA ETRE ENVOYE");
           	toClient.println("yo!\r\n\r\n");          	
              	toClient.flush();
              	System.out.println("envoyé");
              	//end
             } catch (IOException e) {
            	 e.printStackTrace();
    	          try { 
    	           client.close(); 
    	          } catch (IOException ee) {ee.printStackTrace();}
             }
             stop();
          }
     
     
         public void stop() {
             try {
              client.close();
             } catch (IOException e) {
              System.out.println("Exception when closing connection: "+e);
             }
         }
     
     	public  void readClientRequest(StringBuffer buf,BufferedReader br){
    		String line;
    		try {
    			while((line=br.readLine())!=null){
    				buf.append(line).append("\n");
    			}
     
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
     
     	public static void main(String[] args) {
    		new Server();
     
    	}
     
    }
    Appli 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    package test;
     
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintStream;
    import java.net.InetAddress;
    import java.net.Socket;
     
    public class ClientEssai {
    	protected static final int PORT=12345;
     
     
    	  public static void main(String[] args) {
    	   Socket s=null;
     
    	   try {
    	     s=new Socket(InetAddress.getByName("localhost"), PORT);
     
    	     BufferedReader sin=new BufferedReader(new InputStreamReader(s.getInputStream()));
    	     PrintStream sout=new PrintStream(s.getOutputStream());
    	     System.out.println("Connexion : "+ s.getInetAddress()+
    				   " port : "+s.getPort());
    	     String ligne;
    	     while (true) {
    	       System.out.print("?");
    	       System.out.flush();
    	       ligne="donnes client envoyé";
    	       sout.println(ligne);
    	       sout.flush();
    	       System.out.println("ligne sent");
    	       ligne=sin.readLine();
    	       if (ligne==null)
    		    {System.out.println("Connexion stoppee par le serveur");
    		     break;}
    	       System.out.println("!"+ ligne);
    	      }
    	    } // try
    	    catch (IOException e) {System.err.println(e);e.printStackTrace();}
    	    finally
    	      {try {if (s!=null) s.close();}
    	       catch (IOException e2){e2.printStackTrace();}}
    	   } // main
     
    }
    Merci

  2. #2
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Salut,

    Le problème est que la méthode BufferedReader.readLine() est bloquante. Ton client attend que le serveur aie répondu pour envoyer la 2nde ligne, alors que le serveur est bloqué dans readClientRequest() et donc ne répond jamais. Il faut soit que tu coupes la connexion après l'envoi de la commande du client, soit que tu rendes le serveur plus intelligent en lui permettant de traiter la commande sans attendre la fin de la connexion.

    Ensuite une remarque : faire tout le traitement dans le constructeur de Connection() n'est pas vraiment une bonne pratique ...

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

Discussions similaires

  1. Probleme :Time-out fonction GetHostByAddr
    Par atum25 dans le forum C++
    Réponses: 0
    Dernier message: 18/06/2012, 14h43
  2. Probleme de timed out
    Par FraocH dans le forum ASP.NET
    Réponses: 0
    Dernier message: 25/02/2011, 18h43
  3. Probleme Filezilla "Time out".
    Par gamino dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 31/12/2010, 20h20
  4. Probleme de time out
    Par umarus dans le forum Administration
    Réponses: 2
    Dernier message: 05/05/2009, 10h09
  5. [Session]maîtriser le time out de la session
    Par croquedur dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 23/10/2007, 10h57

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