2016-01-20 51 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

相關問題