2017-03-05 1 views
0

Je suis novice en programmation Java et j'essaie simplement de mettre en place un programme réseau de base.Programme de mise en réseau Java simple

J'ai 2 classes, un client et un serveur. L'idée est que le client envoie simplement un message au serveur, puis le serveur convertit le message en majuscules et le renvoie au client. Je n'ai aucun problème pour envoyer un message au client, le problème est que je n'arrive pas à stocker le message que le client envoie du côté serveur variable afin de le convertir. Ne renvoyez pas ce message spécifique.

Voici mon code à ce jour:

côté serveur

 public class Server { 

     public static void main(String[] args) throws IOException { 
      ServerSocket server = new ServerSocket (9091); 

      while (true) { 
       System.out.println("Waiting"); 

       //establish connection 
       Socket client = server.accept(); 
       System.out.println("Connected " + client.getInetAddress()); 


      //create IO streams 
       DataInputStream inFromClient = new DataInputStream(client.getInputStream()); 
       DataOutputStream outToClient = new DataOutputStream(client.getOutputStream()); 

       System.out.println(inFromClient.readUTF()); 

       String word = inFromClient.readUTF(); 

       outToClient.writeUTF(word.toUpperCase()); 
       client.close(); 
      } 
     } 

    } 

côté client

public class Client { 

    public static void main(String[] args) throws IOException { 

     Socket server = new Socket("localhost", 9091); 

     System.out.println("Connected to " + server.getInetAddress()); 

     //create io streams 
     DataInputStream inFromServer = new DataInputStream(server.getInputStream()); 
     DataOutputStream outToServer = new DataOutputStream(server.getOutputStream()); 

     //send to server 
     outToServer.writeUTF("Message"); 

     //read from server 
     String data = inFromServer.readUTF(); 

     System.out.println("Server said \n\n" + data); 
     server.close(); 
    } 
} 

Je pense que le problème pourrait être la « chaîne de mots = inFromClient.readUTF(); ' ligne? S'il vous plaît quelqu'un peut-il conseiller? Merci.

+0

Et pourquoi vous lisez deux fois du client sur le serveur, puis jeter le premier paquet UTF? Oui, vous l'imprimez, mais vous ne le convertissez pas? –

+1

Ici: 'System.out.println (inFromClient.readUTF());' Vous rejetez ce qui est lu. –

Répondre

3

Vous êtes jeter le premier paquet reçu du client:

System.out.println(inFromClient.readUTF()); // This String is discarded 

String word = inFromClient.readUTF(); 

Pourquoi ne pas permuter ces?

String word = inFromClient.readUTF(); // save the first packet received 
System.out.println(word); // and also print it 
+0

Oh merci, ça l'a corrigé. Je n'avais pas réalisé que la chaîne était jetée en faisant cela. Merci. – Tom

+0

@Tom: C'est comme lire à partir d'un scanner. Une fois que vous l'avez lu, vous avancez le pointeur du flux. Cela a du sens si vous y réfléchissez. –

+0

Cela a du sens. Merci pour ça. – Tom