我在寫一個簡單的Java客戶端/服務器應用程序供我自己使用。它應該允許客戶端發送單行文本消息並閱讀多行響應。這種通信應該使用相同的連接重複多次。連續讀取來自套接字的所有輸入
這是我在客戶端讀取回應:
BufferedReader input = new BufferedReader(new InputStreamReader(server.getInputStream()));
String line;
while ((line = input.readLine()) != null) {
// processing here
}
的問題,這是的readLine()塊,一旦服務器發送的第一反應背部和客戶端無法發送,因爲新的消息那。這是可以理解的。一個天真的解決方法可能是通過發送某種已知的特殊字符串值,使客戶端識別並結束讀取循環,從而使服務器指示其輸出結束。但是,這個問題有更好的解決方案嗎?
你的邏輯似乎沒問題,當你得到一個連接你等待一整行到達,處理它,然後等待下一行。這正是你所描述的你想要的。如果您只想讀一行,請刪除一行,但您想要做什麼? –
處理這個問題的通常解決方案是兩個異步線程;其中一個讀取,另一個寫入,並且主線程繼續處理GUI。你可以在隊列上構建東西,這樣GUI就可以將消息添加到寫入線程可以在空閒時立即發送的隊列中。 – Stmated
@RogerLindsjö:我想讀取所有行,然後發送一條新消息,然後再次讀取所有行併發送一條新消息......問題在於readLine塊。 – Ree