Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mystère serveur-Client BufferedReader & printWrite

    19 novembre 2014 à 21:26:23

    Salut à tous,

    Voilà avec le client j'arrive a envoyer et avec le server a recevoir mais je n'arrive pas a envoyer coté server pourtant je fais exactement les même opération voilà le code :

    Client :

        public static void main(String[] args) throws Exception {
        	Client test = new Client();
        	
        	
            String serverHostname = new String ("127.0.0.1");
    
            if (args.length > 0)
               serverHostname = args[0];
            System.out.println ("Attemping to connect to host " +
            serverHostname + " on port 10007.");
    
            Socket echoSocket = null;
            PrintWriter out = null;
            BufferedReader in = null;
    
            try {
                echoSocket = new Socket(serverHostname, 10009);
                out = new PrintWriter(echoSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(
                                            echoSocket.getInputStream()));
            } catch (UnknownHostException e) {
                System.err.println("Don't know about host: " + serverHostname);
                System.exit(1);
            } catch (IOException e) {
                System.err.println("Couldn't get I/O for "
                                   + "the connection to: " + serverHostname+e.getMessage());
               
                System.exit(1);
            }
    
        BufferedReader stdIn = new BufferedReader(
                                       new InputStreamReader(System.in));
        String userInput;
    
        System.out.println(test.p.printFunction());
        System.out.println("\nVeuillez choisir en inscrivant le nom de fonctionnalité :");
        String inputLine = "";
        while ((userInput = stdIn.readLine()) != null) {
            
        	LinkedList<String> res = (LinkedList<String>) test.lancerMethode(test.p, null, userInput);
        	System.out.println(res);
        	String send;
        	while(!res.isEmpty()) {
        		out.println(res.pop());
        	}
        	
        	System.out.println("Avant reception");
     	   	inputLine = in.readLine();
        	System.out.println("Apres reception");
    
        }
    
        out.close();
        in.close();
        stdIn.close();
        echoSocket.close();
        }

    Server

    public static void main(String[] args) throws Exception {
    		ServerSocket serverSocket = null;
    
    		try {
    			serverSocket = new ServerSocket(10009);
    		} catch (IOException e) {
    			System.err.println("Could not listen on port: 10007.");
    			System.exit(1);
    		}
    
    		Socket clientSocket = null;
    		System.out.println("Waiting for connection.....");
    
    		try {
    
    			clientSocket = serverSocket.accept();
    		} catch (IOException e) {
    			System.err.println("Accept failed.");
    			System.exit(1);
    		}
    
    		System.out.println("Connection successful");
    		System.out.println("Waiting for input.....");
    
    		PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
    		BufferedReader in = new BufferedReader(new InputStreamReader(
    				clientSocket.getInputStream()));
    
    		String inputLine;
    		Server test = new Server();
    		LinkedList<String> res = new LinkedList<String>();
    		while ((inputLine = in.readLine()) != "quit") {
    		res.add(inputLine);
    			while ((inputLine = in.readLine()) != null) {
    				System.out.println(inputLine);
    				res.add(inputLine);
    			
    			}			
    					
    	
    			LinkedList<String> ret = test.model.listNickNameByName("Julien");
    			System.out.println("Avant envoie");
    			
    			while(!ret.isEmpty()) {
    				
    	    		out.println(ret.pop());
    	    	}
    			
    			while((inputLine = in.readLine()) != "quit") System.out.println("attente Active");
    			
    		}

    Le client affiche Avant réception puis plus rien donc il ne reçoit pas l'information du server pourtant ce dernier a bien fais les :

    out.println(ret.pop());

    et est ensuite dans l'attente active.

    Si quelqu'un peu expliquer pourquoi le client ne reçoit pas ce out.println()

    Merci d'avance de votre réponse,

    Echyzen

    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2014 à 21:53:21

      Bonjour,

      je pense que le problème vient de la ligne 34 dans la classe serveur. Celui-ci est en attente de NULL c'est à dire la fermeture de la connexion dans ton cas et sauf erreur. 

       Afin de résoudre le problème tu peux remplacer la ligne 34 par

      while (!(inputLine = in.readLine()).equals("END")) {

      par exemple.

      Edit du message: Je viens de voir une erreur ligne 32. Pour comparer 2 objets en Java il faut utiliser la méthode equals (tu ne le voulais peut être pas) :).

      -
      Edité par rybla 19 novembre 2014 à 21:56:13

      • Partager sur Facebook
      • Partager sur Twitter
        21 novembre 2014 à 7:52:45

        Non mais c'est pas cela le soucis bien que je peux le modifier car tous ceci marche il reçoit bien l'info et met tout dans le LinkedList j'ai printer pour voir non le soucis  c'est la deuxieme partie du code

        LinkedList<String> ret = test.model.listNickNameByName("Julien");
                    System.out.println("Avant envoie");
                     
                    while(!ret.isEmpty()) {
                         
                        out.println(ret.pop());
                    }

        La j'ai printer la boucle while et il y passe bien aussi mais pourtant le out.println() ne semble rien envoyer pourtant sa déclaration est la même que celle côté client qui elle fonctionne très bien....

        Je vais continuer a tester ce grand mystère XD

        • Partager sur Facebook
        • Partager sur Twitter
          21 novembre 2014 à 9:37:40

          Server :

          		while (!(inputLine = in.readLine()).equals("END")) {
          
          			String re = "Envoie Serveur";
          	
          			System.out.println(re);
          			out.println(re);
          
          
          			
          		}

          Client :

              while (!(userInput = stdIn.readLine()).equals("END")) {
          
              	
              	out.println("debut");
          
              	userInput = in.readLine();
              		System.out.println("echo: " + inputLine);
              		
           
              	System.out.println("fin boucle");
          
              }
              out.println("END");

          Res Client : print juste echo : sans afficher le "Envoie server"

          et au END tous s'arrete bien des deux coté




          • Partager sur Facebook
          • Partager sur Twitter

          Mystère serveur-Client BufferedReader & printWrite

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown