2016-04-17 6 views
-1

Ich habe eine Client-Datei clientRPC.java und Server-Datei serverRPC.java. Beide kommunizieren unter Verwendung des TCP-Protokolls und verwenden einen Objektinput- und Ausgabestrom, um Daten zu übertragen.TCP-Client und -Server, cmd-Eingabeaufforderung mit Objektströmen

meine Client-Datei:

public class clientRPC { 

public static void main(String args[]) { 

    Socket s = null; 

    try { 

     int serverPort = 8888; 

     s = new Socket("localhost", serverPort);// server name is local host  

     //initializing input and output streams object and referencing them to get input and output 
     ObjectInputStream in = null; 
     ObjectOutputStream out = null; 

     out = new ObjectOutputStream(s.getOutputStream()); 
     in = new ObjectInputStream(s.getInputStream()); 

     MathsTutor mt = new MathsTutor(); 


     out.writeObject(mt); 
     out.flush(); 

     System.out.println("Welcome to Maths Tutor Service. The available maths exercises are:\n" 
       + "Addition: Enter 'A' or 'a'\n" 
       + "Subtraction: Enter 'S' or 's'\n" 
       + "Multiplication: Enter 'M' or 'm'\n" 
       + "Division: Enter 'D' or 'd'\n" 
       + "Enter 'Q' or 'q' to quit");      

     //System.out.println(); 

     MathsTutor mt1 = (MathsTutor) in.readObject(); 

     String response = in.readUTF(); 
     System.out.println(response); 

    } catch (UnknownHostException e) { 
     System.out.println("Socket:" + e.getMessage()); 
    } catch (EOFException e) { 
     System.out.println("EOF:" + e.getMessage()); 
    } catch (IOException e) { 
     System.out.println("readline:" + e.getMessage()); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } finally { 
     if (s != null) { 
      try { 
       s.close(); 
      } catch (IOException e) { 
       System.out.println("close:" + e.getMessage()); 
      } 
     } 
    } 
} 
} 

und meine Server-Datei:

public class serverRPC extends Thread { 

String request; 
String response; 

public static void main(String args[]) { 

    try { 
     int serverPort = 8888; 
     ServerSocket listen_socket = new ServerSocket(serverPort); 

     while (true) { 
      Socket clientSocket = listen_socket.accept(); 
      Connection c = new Connection(clientSocket); 
     } 
    } catch (IOException e) { 
     System.out.println("Listen socket:" + e.getMessage()); 
    } 

public serverRPC(String s) { 
    request = s; 
} 
} 

class Connection extends Thread { 

ObjectInputStream in; 
ObjectOutputStream out; 
Socket clientSocket; 

public Connection(Socket aClientSocket) { 

    try { 
     clientSocket = aClientSocket; 
     in = new ObjectInputStream(clientSocket.getInputStream()); 
     out = new ObjectOutputStream(clientSocket.getOutputStream()); 
     this.start(); 
    } catch (IOException e) { 
     System.out.println("Connection:" + e.getMessage()); 
    } 
} 


public void run() { 

    try { 

     MathsTutor mt = (MathsTutor) in.readObject(); 
     InetAddress ip = clientSocket.getInetAddress(); 

     System.out.println("The Received Message from Client at address:/" + ip.getHostAddress()); 
     System.out.println("===================================="); 

     MathsTutor mt1 = new MathsTutor(); 
     out.writeObject(mt1); 

     while(true) { 
      // Read from input 
      String command = in.readUTF(); 
      System.out.println(command); 

      } 

     //System.out.println(); 

    } catch (EOFException e) { 
     System.out.println("EOF:" + e.getMessage()); 
    } catch (IOException e) { 
     System.out.println("readline:" + e.getMessage()); 
    } catch (ClassNotFoundException ex) { 
     ex.printStackTrace(); 
    } finally { 
     try { 
      clientSocket.close(); 
     } catch (IOException e) {/*close failed*/ 

     } 
    } 
} 
} 

Das Problem ist, wenn ich Server ausgeführt und dann Client auf cmd, zeigt der Client-Seite die Begrüßungs msg und setzt Cursor auf einer anderen Zeile für Benutzereingaben, aber ich kann nichts tippen, der Cursor blinkt nur ... Ich weiß, das könnte einfach sein, aber es hat schon 3 Stunden für mich gedauert und ich stecke in der gleichen Sache fest.

Der rot markierte Cursor blinkt, lässt aber nichts tippen.

image

+0

Veröffentlichen Sie keine Bilder von Text hier lesen. Veröffentlichen Sie den Text. – EJP

Antwort

0

Sie schreiben ein Objekt mit writeObject() und versucht, es mit readUTF() zu lesen. Unlogisch.

  • mit writeObject() geschrieben Objekte müssen mit readObject() gelesen werden.
  • Zeichenketten, die mit writeUTF() geschrieben wurden, müssen mit readUTF() gelesen werden.
  • Primitiven mit writeXXX() geschrieben werden, müssen mit readXXX(), für die meisten Werte von X.
+0

kannst du meine neue Frage lesen ??? bitte könnte es gleich aussehen, aber es ist anders als das .... bitte –