2016-01-20 47 views
0

我使用Socket从一台服务器发送任务到另一个像这样:如何在写入ObjectOutputStream之后读取套接字响应?

private boolean sendRequest(String address, int port) { 
    boolean requestComplete = false; 
    try { 
     Socket socket = new Socket(address, port); 
     ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream()); 
     oos.writeObject("task_to_complete"); 

     ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
     String msg = (String)ois.readObject(); 
     if(msg.equals("complete")){ 
      requestComplete = true; 
     } 
     ois.close(); 
     oos.close(); 
     socket.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return requestComplete; 
} 

第二服务器接收任务,像这样:

while (true) { 

    // wait for connection 
    Socket socket = serverSocket.accept(); 
    System.out.println("New connection accepted " + socket.getInetAddress() + ":" + socket.getPort()); 

    // retrieve request from server 
    ObjectInputStream ois = new ObjectInputStream(socket.getInputStream()); 
    String msg = (String) ois.readObject(); 

    switch (msg) { 
    case "task_to_complete": 
     // do task 1 
     break; 
    } 

    System.out.println("Task " + msg + " complete."); 

    // send a message back to client with the result of the task it 
    // requested 
    PrintWriter out = 
      new PrintWriter(socket.getOutputStream(), true); 
     out.print("complete"); 
    ois.close(); 
    socket.close(); 
} 

但我得到的错误

java.io.EOFException在 java.io.ObjectInputStream $ PeekInputStream.readFully(Unknown Source)

当我尝试从第一台服务器读取消息“完成”时: ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());

什么是造成此错误?

回答

2

你搞砸了你的协议,因为

  • 服务器写入与PrintWriter.print("completed")
  • 客户端读取响应工作对我来说它与readObject()

我把一个working demo on GitHub

0

尝试使用

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 

String msg = in.readLine(); 

if(msg.equals("complete")){ 
     requestComplete = true; 
    } 

它在一个类似的情况

+0

这给了我一个“msg”的'NullPointerException'。 – crm

相关问题