2013-05-18 86 views
0

我正在爲我的java網絡考試練習一些東西,我似乎無法弄清楚這一點。 我寫了一個簡單的服務器程序,假設要問我的客戶程序一個問題,然後等待來自客戶端的回覆,然後再繼續處理答案。Java:如何檢查BufferedReder是否爲空?(包含代碼)

繼承人有點我的代碼:

//Server: 
BufferedReader in = new BufferedReader(
        new InputStreamReader(clientSocket.getInputStream()) 
        ); 
String answer1; 
while(!in.ready()){ //wait till client replies 
} 
answer1 = in.readLine(); 
//do something with answer1 
//repeat for answer 2 and so on..... 

上述循環無法正常工作,服務器只運行整個程序,而無需等待答覆形成客戶端。 in.readLine()語句本身(沒有while循環)不會等待。

有沒有簡單的方法來檢查BufferedReader是否爲空或至少讓程序等待回覆?我知道我無法測試它是否爲空,因爲只要套接字連接,那不會是真的。

+0

你的意思是「服務器只運行整個程序而不等待回覆」?你在程序中調用了'BufferedReader.readLine',你是說返回的數據是空的嗎?或者這個電話會永遠阻止,什麼也不做? – Perception

+0

是的,如果我自己放入bufferedreader.readline(),我會得到空數據,甚至在客戶有機會回覆並轉到下一個問題之前。我假設這是正常的,因爲緩衝讀取器將始終有一些數據,並且只有在套接字之間沒有連接時纔會爲空。 –

+0

在客戶端的答覆應該由我通過命令提示符手動完成,但我沒有機會這樣做,因爲服務器不會等待。 –

回答

2

你不需要這個。只需調用readLine()。它會阻止,直到數據到達。

如果我把bufferedreader.readline()本身,我得到空的數據

不,你不會。你什麼都沒得到。該方法阻塞,直到數據到達。

你在某個地方有一個基本的誤解。

+0

Your'r的權利,我分別測試了這條線,它的工作。我想我的代碼中一定有其他錯誤。 謝謝:D –