2010-11-01 19 views
0

Je n'arrive pas à comprendre pourquoi le code ci-dessous ne fonctionne pas. Le client envoie un message au serveur et le serveur imprime le message sur la sortie standard.Le client et le serveur Java simples n'interagissent pas correctement

Code pour le serveur:

import java.net.*; 
import java.io.*; 
import java.math.BigInteger; 

public class server 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      ServerSocket server = new ServerSocket(8080); 

      while (true) 
      { 
       // initializations 
       Socket connection = server.accept(); 
       BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
       PrintWriter out = new PrintWriter(connection.getOutputStream()); 

       // listen for client message 
       String message = in.readLine(); 

       // print raw message from client 
       System.out.println(message); 

       // close resources 
       if (out != null) 
        out.close(); 
       if (in != null) 
        in.close(); 
       if (connection != null) 
        connection.close(); 
      } 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.getMessage()); 
      System.exit(1); 
     } 
    } 
} 

Code pour le client:

import java.net.*; 
import java.io.*; 
import java.math.BigInteger; 

public class client 
{ 
    public static void main(String args[]) 
    { 
     try 
     { 
      // initializations 
      Socket connection = new Socket("localhost", 8080); 
      BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      PrintWriter out = new PrintWriter(connection.getOutputStream()); 

      // send message to server 
      out.println("Hello, world!"); 

      // close resources 
      if (in != null) 
       in.close(); 
      if (out != null) 
       out.close(); 
      if (connection != null) 
       connection.close(); 
     } 
     catch (Exception e) 
     { 
      System.out.println(e.getMessage()); 
      System.exit(1); 
     } 
    } 
} 

Toute autre idée? Merci!

+0

exactement ce qu'il est dit l'erreur ?? – Jorge

+0

Il n'y a pas "erreur"; le code compile bien. Mais après avoir démarré le serveur puis le client, le serveur se bloque sans rien imprimer à la sortie standard. –

+0

Se bloque où? Exécuter sous un débogueur ou ajouter des printlns pour savoir où? Le client s'exécute-t-il et se termine-t-il sans erreur? –

Répondre

1

Ce PrintWriter par défaut n'est pas autoflash. (Et doesnot chasse d'eau sur près Writer abstrait peut trompeusement vous amener à croire Soit faire.

PrintWriter out = new PrintWriter(connection.getOutputStream(), true); 

ou bien

out.println("Hello, world!"); 
    out.flush(); 
3

Ce que vous devez faire pour comprendre ce type de problème, est de Isolez d'où vient le problème Est-ce la partie serveur ou la partie client? Un test facile pour le serveur est de le démarrer, puis telnet à ce port (par exemple "telnet 127.0.0.1 8080") tapez quelque chose et voir si elle est en sortie. (btw, votre code de serveur fonctionne bien)

Cela permettrait vous concentrer sur votre code client. Comme Affe l'a déclaré, vous n'avez tout simplement pas débusquer le flux d'entrée. Les méthodologies d'apprentissage pour le code de dépannage sont au moins aussi importantes que l'apprentissage de l'écriture de code.

également en aparté, par convention, les classes Java commencent par une lettre majuscule, il devrait donc être « serveur » et « client »

+0

Merci pour le conseil. Malheureusement, pour l'assignation, la spécification appelle des noms en minuscules. –

0

Ajouter une chasse d'eau après que vous écrivez au flux dans votre client:

 

      // send message to server 
      out.println("Hello, world!"); 
      out.flush(); 
 

Assurez-vous également que la prise du serveur ne soit pas bloqué par le pare-feu