0
我已經在這裏讀了一些線程在計算器,還有一些教程,但我沒有找到一個解決我的問題。閱讀多行使用的BufferedReader(插座)
我有連接到服務器Java客戶端,然後發送剛好一個線到服務器,並且我得到2個或3行作爲響應。
這裏是我的代碼:
public static void main(String[] args) {
String message;
String response;
try {
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
Socket clientSocket = new Socket(hostname, port);
DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
message = inFromUser.readLine();
outToServer.writeBytes(message + '\n');
// here my program "freezes"
while ((response = inFromServer.readLine()) != null) {
System.out.println("response: " + response);
}
clientSocket.close();
} catch (UnknownHostException e) {
System.out.println("Unknown Host");
} catch (IOException e) {
System.out.println("IO Exception");
}
}
我的問題是,我可以讀取響應的每一行,但我的程序不會退出。該行clientSocket.close();從未被調用過。我究竟做錯了什麼?
好的,謝謝對你的回答。我們的連接沒有真正的協議,服務器會發送一條消息,如「您的帳戶已成功註冊」。然後它結束了。我認爲有一個優雅的解決方案可用,我不想檢查response.contains(「成功註冊」)例如。 – beeef
@beeef:那裏*是一個協議,即使它是隱含的。這聽起來像服務器應當關閉連接...但它會坦率地說可能是簡單的,如果你只是做服務器和客戶端使用HTTP來代替,因爲有一個在提供幾乎所有被廣泛使用的平臺,爲HTTP的大力支持。 .. –