使用 BufferedReader (Socket) 读取多行
Read multiple lines using BufferedReader (Socket)
我已经在 Whosebug 上阅读了一些主题,还有一些教程,但我没有找到解决我的问题的方法。
我有 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(); 行永远不会被调用。我做错了什么?
大概您的服务器没有关闭连接 - 因此 reader 的基础流没有关闭...在任何时候服务器 可以 发送更多信息。 readLine()
仅returnsnull
流关闭时,即肯定不会再有数据。
现在我们对这里的协议一无所知,但如果预期的行为是客户端不再发送任何信息,服务器将关闭连接,那么错误就在服务器中。如果协议声明服务器将保持连接打开,那么错误就在你的客户端代码中,你需要弄清楚如何检测数据结束(或发送某种确认,这将导致服务器关闭连接,或其他)。
我已经在 Whosebug 上阅读了一些主题,还有一些教程,但我没有找到解决我的问题的方法。
我有 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(); 行永远不会被调用。我做错了什么?
大概您的服务器没有关闭连接 - 因此 reader 的基础流没有关闭...在任何时候服务器 可以 发送更多信息。 readLine()
仅returnsnull
流关闭时,即肯定不会再有数据。
现在我们对这里的协议一无所知,但如果预期的行为是客户端不再发送任何信息,服务器将关闭连接,那么错误就在服务器中。如果协议声明服务器将保持连接打开,那么错误就在你的客户端代码中,你需要弄清楚如何检测数据结束(或发送某种确认,这将导致服务器关闭连接,或其他)。