2016-09-25 60 views
0

我創建了一個簡單的類,它將一個字符串發送到服務器,兩者都使用Java Sockets API進行通信。服務器讀取客戶端發送的內容,並用另一個字符串進行響應。但客戶端無法讀取該響應。使用Java套接字API讀取服務器響應

這是客戶端類:

import java.io.IOException; 
import java.net.Socket; 

public class Client { 

    public static void main(String[] args) throws IOException { 
     Socket socket = new Socket("localhost", 8181); 
     socket.getOutputStream().write("Hello".getBytes()); 

     int read; 
     while ((read = socket.getInputStream().read()) > -1) { 
      System.out.print((char) read); 
     } 

     socket.close(); 
    } 

} 

這是服務器類:

import java.io.IOException; 
import java.net.ServerSocket; 
import java.net.Socket; 

public class Server { 

    public static void main(String[] args) throws IOException { 
     ServerSocket serverSocket = new ServerSocket(8181); 

     while (true) { 
      Socket socket = serverSocket.accept(); 
      int read; 
      while ((read = socket.getInputStream().read()) > -1) { 
       System.out.print((char) read); 
      } 

      socket.getOutputStream().write("Hi!".getBytes()); 
     } 

    } 

} 

我想,問題可能出在客戶端執行流程,因爲我不`噸知道我該怎麼做才能等待服務器響應。換句話說,如何實現一個能夠讀取服務器響應的客戶端?

回答

1
  1. 您不關閉插座。
  2. 服務器正試圖讀取直到流結束,然後發送答覆。流的結束只發生在對等關閉連接時,所以即使修復(1)後也不可能發送回覆。您需要閱讀消息,無論您的應用程序協議如何。
+0

由於while((read = socket.getInputStream()。read())> -1),服務器等待客戶端關閉連接。 –

0

您需要刷新或關閉輸出流。