2017-03-05 14 views
0

Ich bin neu in der Java-Programmierung und ich versuche nur, ein sehr einfaches Netzwerk-Programm zu bekommen.Einfaches Java-Netzwerk-Programm

Ich habe 2 Klassen, einen Client und einen Server. Die Idee ist, dass der Client einfach eine Nachricht an den Server sendet, dann konvertiert der Server die Nachricht in Großbuchstaben und sendet sie zurück an den Client.

Ich habe keine Probleme bekommen den Server eine Nachricht an den Client senden, das Problem ist, ich kann nicht scheinen, um die Nachricht zu speichern, die der Client in einer Variablen Server-Seite sendet, um es zu konvertieren und so können Sende diese spezifische Nachricht nicht zurück.

Hier ist mein Code so weit:

Server-Seite

 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(); 
      } 
     } 

    } 

Client-Seite

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(); 
    } 
} 

Ich denke, das Problem mit dem ‚String Wort sein könnte = inFromClient.readUTF(); " Linie? Kann bitte jemand beraten? Vielen Dank.

+0

Und warum lesen Sie zweimal vom Client auf dem Server und dann das erste UTF-Paket verwerfen? Ja, Sie drucken es, aber Sie konvertieren es dann nicht? –

+1

Hier: 'System.out.println (inFromClient.readUTF());' Sie verwerfen, was eingelesen wird. –

Antwort

3

Sie verwirft das erste Paket vom Client empfangen:

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

String word = inFromClient.readUTF(); 

Warum diese nicht tauschen?

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

Oh danke, das hat es behoben. Ich habe nicht bemerkt, dass der String weggeworfen wurde. Vielen Dank. – Tom

+0

@Tom: Es ist wie beim Einlesen von einem Scanner. Sobald Sie es eingelesen haben, bewegen Sie den Zeiger des Streams weiter. Es macht Sinn, wenn Sie darüber nachdenken. –

+0

Das macht Sinn. Dank dafür. – Tom