TCP客户端和服务器,使用objectstreams的cmd提示符

我有一个客户端文件clientRPC.java和服务器文件serverRPC.java。 两者都使用TCP协议进行通信,并使用objectinput和输出流来传输数据。

我的客户档案:

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

和我的服务器文件:

 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*/ } } } } 

问题是当我在cmd上运行服务器然后运行客户端时,客户端显示欢迎消息并将光标放在另一行上以供用户输入但是,我无法输入任何内容,光标只是闪烁…我知道这可能是很简单,但我已经花了3个小时,我陷入了同样的困境。

标有红色的光标一直闪烁,但不允许我键入任何内容。

图片

您正在使用writeObject()编写一个对象,并尝试使用readUTF()读取它。 不合逻辑的。

  • 必须使用readObject()读取使用writeObject()编写的对象。
  • 必须使用readUTF()读取用writeUTF()编写的字符串。
  • 对于大多数X值,必须使用writeXXX()读取用readXXX()编写的原语。