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的大力支持。 .. –