2012-10-23 97 views
3

我使用的老同學java.net.SocketBufferedReader上的Java客戶端套接字阻塞?

我的客戶端連接到服務器並執行:

BufferedReader in = 
    new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
String fromServer = in.readLine(); 

它掛在in.readLine()。

我的服務器接受來自客戶端的連接並執行:

PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
out.print("Hello client\n"); 

我的預期是,一旦的out.print(「你好客戶端\ n」);被調用,客戶端應該停止阻塞並繼續。

我做錯了什麼?

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); 
BufferedReader in = 
    new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); 
String fromServer = in.readLine(); 

回答

3

我猜你是不是要求out.flush();PrintWriter.flush

Javadoc

自動刷新 - 一個布爾值;如果爲true,println的,printf或format方法將刷新輸出緩衝區

所以Autoflush不會爲print工作,你將需要調用flush()碼的手動

+0

autoflush已設置PrintWriter構造函數。 – dublintech

+1

@dublintech print沒有列出autoflush的命令 –

+1

具體來說,'autoFlush - 一個布爾值;如果爲true,則println,printf或format方法將刷新輸出緩衝區。這是從AmitD在PostWriter發佈的鏈接中引用的。 – kurtzbot

2

要調用out.print("Hello client\n"),這是不自動刷新,當你應該呼叫out.println("Hello client"),這是自動刷新。