[Resolu][Java][Client/Server]M ode Console - Pkoi s attendent ils ?

M ode Console - Pkoi s attendent ils ? [Resolu][Java][Client/Server] - Java - Programmation

Marsh Posté le 08-11-2002 à 12:53:31    

Bon j esaye de developper une application bete Client/Server.
Or je suis coince carje ne comprends pas pourquoi ils s attendent indefiniment ?
C est un probleme de timing ? non c est pas possible a mon sens.
 
Server

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. import java.util.*;
  4. class server
  5. {
  6. public static void main( String arg[])
  7. {
  8.     String inp;
  9.     String Request;
  10.    
  11.       try
  12.       {
  13.             System.out.println("Listening..." );
  14.             ServerSocket sock = new ServerSocket(1111);
  15.             Socket sock1 = sock.accept();
  16.             System.out.println("\nAccepting" );
  17.             System.out.println(sock1.toString());
  18.             System.out.println("address : " + sock1.getInetAddress());
  19.             System.out.println("port    : " + sock1.getPort());
  20.             //This below is actually read but never display. COULD BE USE
  21.             // BufferedReaders' Declaration
  22.             BufferedReader is = new BufferedReader(new InputStreamReader (sock1.getInputStream() ) );
  23.             //WHAT KIND OF INFORMATION ARE INCLUDED IN THE "STREAM" ?
  24.            
  25.             //change the message!!
  26.             System.out.println("Sending: Welcome "+ sock1.getInetAddress().getHostName()+". We are "+ new Date()+ "\n" );
  27.             DataOutputStream out = new DataOutputStream(sock1.getOutputStream());
  28.             out.writeBytes("Welcome "+ sock1.getInetAddress().getHostName()+   ". We are "+ new Date()+ "\n" );
  29.            
  30.            
  31.         /*********************************************************************************************/   
  32.             // I) CREATE A CATALOGUE
  33.             String []CATALOGUE = new String[2];
  34.             CATALOGUE[0] = "Item1AV";
  35.             CATALOGUE[1] = "Item2AV";
  36.                  
  37.             // II) WHEN REQUEST IS RECIEVED, SEND OVER THE CATALOGUE
  38.            
  39.            
  40.            
  41.             System.out.println("this is the contents of the catalogue "+ CATALOGUE[0] +" & "+ CATALOGUE[1] );
  42.             System.out.println("Waiting for client ..." );
  43.            
  44.             Request = is.readLine();
  45.             System.out.println("Value of the String named Request :"+Request);
  46.            
  47.             // String Request test with a if function
  48.             if (Request.equalsIgnoreCase("catalogue" )) //condition now approuved
  49.             {
  50.                 System.out.println("Sending Catalogue Now" );
  51.                
  52.                
  53.                 out.writeBytes(CATALOGUE[0]);
  54.                 // I try with the first DataOutputStream : "out"
  55.             }           
  56.             // III) WAIT FOR THE CHOICE AND ACKNOWLEDGE
  57.             // IV) TERMINATE APPLICATION
  58.             //our work
  59.         /*********************************************************************************************/   
  60.            
  61.            
  62.             System.out.println("Waiting for client ..." );
  63.             inp = is.readLine();
  64.             System.out.println("From client:" + inp);
  65.             //Ending communication
  66.             sock1.close();
  67.             sock.close();
  68.             out.close();
  69.            
  70.       }
  71.      
  72.       catch(IOException err)
  73.       {
  74.        System.out.println(err.getMessage());
  75.       }
  76.       finally
  77.       {
  78.        System.out.println("End of the program" );
  79.       }
  80. }//END OF MAIN
  81. }//CLASS END


 
Client

Code :
  1. import java.net.*;
  2. import java.io.*;
  3. public class Newclient
  4. {
  5. public static void main (String[]args) throws IOException
  6. {
  7.      // stdin will be a mean to read and buffer the keyboad's inputs (user's input)
  8.      BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  9.    
  10.      System.out.print("Please Enter Host name : " );
  11.      String hostname = stdin.readLine();
  12.    
  13.      System.out.print("\nInput Port Number : " );
  14.      String portnumber = stdin.readLine(); //careful "portnumber" is a string of character here     
  15.       /*if (args.length !=2) //two arguments needed before run the client; in the command prompt
  16.                            //[drive][path]java client HostName Port; here port is 1111
  17.        System.out.println(" Usage : chap14_02 host port" );
  18.        */
  19.        //Variable declaration
  20.        String inp; //"inp" is the string where the message from the server is stocked
  21.        try
  22.        {
  23.             //"sock" is a new socket
  24.             Socket sock = new Socket(hostname, Integer.valueOf(portnumber).intValue());
  25.             //BufferedReaders' delaration
  26.             BufferedReader is = new BufferedReader( new InputStreamReader (sock.getInputStream()));// is represents a buffer for the incoming informations
  27.             System.out.println("address : " + sock.getInetAddress());
  28.             System.out.println("port : " + sock.getPort());
  29.             //System.out.println("Local address : " + sock.getLocalAddress());
  30.             //System.out.println("Localport : " + sock.getLocalPort());
  31.             // Connection confirmation
  32.             System.out.println("Waiting for Greatings from Server..." );   
  33.             inp = is.readLine();
  34.             System.out.println("\n\nFrom server:" + inp);   
  35.        
  36.            
  37.             /************************************************************************/   
  38.             // I)ASKING FOR A CATALOGUE
  39.             System.out.println("Sending a Request for a catalogue" );
  40.             DataOutputStream out = new DataOutputStream(sock.getOutputStream()); //Previously DataOutputStream catalogue = new DataOutputStream(sock.getOutputStream());
  41.             out.writeBytes("catalogue" );
  42.                                    
  43.             // II) WAITING FOR AN ANSWER
  44.            
  45.             inp = is.readLine();
  46.             System.out.println("\n\nFrom server:" + inp);
  47.            
  48.             // III) DISPLAY HE CATALOGUE ON SCREEN
  49.            
  50.             // IV) CHOOSE & SEND
  51.             // V) WAIT ACKNOWLEDGEMENT
  52.             // VI) TERMINATE APPLICATION
  53.             //Our work
  54.         /*************************************************************************/   
  55.             //DataOutputStream out = new DataOutputStream(sock.getOutputStream());
  56.             System.out.println("Send a goodbye" );
  57.             out.writeBytes("Thank you, and goodbye" ); 
  58.             //Ending communication
  59.             sock.close();
  60.             is.close();
  61.        }
  62.         catch (UnknownHostException e)
  63.         {
  64.             System.out.println(" Known Host : " + e.getMessage());
  65.         }
  66.         catch (IOException e)
  67.         {
  68.             System.out.println("error I/O : " + e.getMessage());
  69.         }
  70.         finally
  71.         {
  72.             System.out.println("End of program" );
  73.         }
  74.  
  75. }
  76. }


 
Merci d avance !  :jap:  
 
@++


Message édité par KrzAramis le 08-11-2002 à 14:05:30

---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 08-11-2002 à 12:53:31   

Reply

Marsh Posté le 08-11-2002 à 12:58:30    

du moment que t'as plein de System.out.println un peu partout, tu veux pas être plus précis et dire ou ils se bloquent ?  
 
j'ai pas envie de tout lire  ;)

Reply

Marsh Posté le 08-11-2002 à 13:01:19    

le programme Server bloque  

Code :
  1. System.out.println("Waiting for client ..." );
  2.            
  3.            Request = is.readLine();


et le client bloque

Code :
  1. out.writeBytes("catalogue" );
  2.                                    
  3.            // II) WAITING FOR AN ANSWER  
  4.            
  5.            inp = is.readLine();


 
Voila !


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 08-11-2002 à 13:05:52    

essaye voir de flusher apres avoir envoyé les données :

Code :
  1. out.writeBytes("catalogue" ); 
  2. out.flush(); //force l'envoi des données                                   
  3.           // II) WAITING FOR AN ANSWER   
  4.          
  5.           inp = is.readLine();

Reply

Marsh Posté le 08-11-2002 à 13:10:20    

Beuh... c'est moche...  
 
Et je dirais que oui il faut faire un flush.

Reply

Marsh Posté le 08-11-2002 à 13:11:32    

pa s de bol ca marche pas!
 
est ce que par hasard le server ne doit pas contenir sock.accept(); plusieur fois dans le code ?
 
 :fou:


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 08-11-2002 à 13:13:33    

KrzAramis a écrit a écrit :

 
est ce que par hasard le server ne doit pas contenir sock.accept(); plusieur fois dans le code ?




 
Non. Fin du moins pas dans ton exemple où le serveur quitte apres un client. Accept c'est juste pour autoriser un client a se connecter et récuperer la socket associée a cette connexion.

Reply

Marsh Posté le 08-11-2002 à 13:17:07    

J'ai compilé ton machin et ça a l'air de fonctionner, pour autant que je puisse en juger:
server:

Code :
  1. D:\java\src>j server
  2. Listening...
  3. Accepting
  4. Socket[addr=/127.0.0.1,port=4303,localport=1111]
  5. address : /127.0.0.1
  6. port    : 4303
  7. Sending: Welcome 127.0.0.1. We are Fri Nov 08 13:15:40 CET 2002
  8. this is the contents of the catalogue Item1AV & Item2AV
  9. Waiting for client ...


 
client:

Code :
  1. D:\java\src>j Newclient
  2. Please Enter Host name : localhost
  3. Input Port Number : 1111
  4. address : localhost/127.0.0.1
  5. port : 1111
  6. Waiting for Greatings from Server...
  7. From server:Welcome 127.0.0.1. We are Fri Nov 08 13:15:40 CET 2002
  8. Sending a Request for a catalogue


Reply

Marsh Posté le 08-11-2002 à 13:18:29    

et je me suis contenté d'ajouter deux '}' et un ';' là où ils manquaient.

Reply

Marsh Posté le 08-11-2002 à 13:20:42    

ben non, ca bloque la ou il a dit, vu l'affichage que tu obtiens  [:sinclaire]

Reply

Marsh Posté le 08-11-2002 à 13:20:42   

Reply

Marsh Posté le 08-11-2002 à 13:27:00    


Mais pourquoi ca BLOQUE ????????????????
 :fou:  
c est ca qui me gene !!!????!!
 
Je capte pas pourquoi ! :heink:  
 
 
 
merci d avance  :jap:


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 08-11-2002 à 13:27:37    

KrzAramis a écrit a écrit :

le programme Server bloque  
et le client bloque

Code :
  1. out.writeBytes("catalogue\n" );
  2.                                    
  3.            // II) WAITING FOR AN ANSWER  
  4.            
  5.            inp = is.readLine();






Manque un '\n'.

Reply

Marsh Posté le 08-11-2002 à 13:32:32    

Car le server fair un readline, il attend indéfiniment le marqueur de fin de ligne après la chaine 'catalogue'.
Je viens de tester, ça fonctionne.
 

Reply

Marsh Posté le 08-11-2002 à 13:33:26    

:pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  :pt1cable:  
NON c est toujours pas ca  :pt1cable:  
 
d ailleurs je ne vois pas ce que '\n' change !


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 08-11-2002 à 13:36:55    

Tu fais des readLine donc tu dois envoyer des lignes entières, avec le '\n' en fin de chaine.
 
A chaque readLine doit correspondre une ligne cad une chaine de caractères terminée par un '\n', or toutes les chaines que tu envoies ne finissent pas par des '\n'.
 
Ca me rappelle le C et les chaines qui se terminent par '\0' ça...


Message édité par krosso le 08-11-2002 à 13:40:52
Reply

Marsh Posté le 08-11-2002 à 13:39:14    

:jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  :jap:  
 
 
Big THANKS YOU  
 
 
 :jap:  :jap:  :jap:  :jap:  :jap:  
 
 
ca marche !!!!


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Marsh Posté le 08-11-2002 à 14:04:15    

desole pour l incoherence de mes posts precedent j ai ma connexion qui a vachement ralenti !!
 
merci encore  :jap:


---------------
The Only Way for Evils to Triumph is for Good Men to do Nothing @->-- Cours Réseaux@->-- Mon Site
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed