Java 使用BufferedReader(套接字)读取多行
我已经读了一些关于stackoverflow的文章,还有一些教程,但是我没有找到解决问题的方法 我有一个Java客户机,它连接到一个服务器,然后只向服务器发送一行,我得到2或3行作为响应 这是我的密码:Java 使用BufferedReader(套接字)读取多行,java,sockets,bufferedreader,Java,Sockets,Bufferedreader,我已经读了一些关于stackoverflow的文章,还有一些教程,但是我没有找到解决问题的方法 我有一个Java客户机,它连接到一个服务器,然后只向服务器发送一行,我得到2或3行作为响应 这是我的密码: public static void main(String[] args) { String message; String response; try { BufferedReader inFromUser = new BufferedReader(
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()行;从未接到过电话。我做错了什么?大概您的服务器没有关闭连接-因此读卡器的底层流没有关闭。。。服务器可以随时发送更多信息
readLine()
仅在流关闭时返回null
,即绝对不会有更多数据
现在我们对协议一无所知,但是如果预期的行为是客户端不会发送更多的信息,服务器会关闭连接,那么错误就在服务器中。如果协议声明服务器将保持连接打开,那么错误就在您的客户端代码中,您需要确定如何检测数据的结束(或者发送某种ack,导致服务器关闭连接,或者其他).可能您的服务器没有关闭连接-因此读卡器的底层流没有关闭。。。服务器可以随时发送更多信息
readLine()
仅在流关闭时返回null
,即绝对不会有更多数据
现在我们对协议一无所知,但是如果预期的行为是客户端不会发送更多的信息,服务器会关闭连接,那么错误就在服务器中。如果协议规定服务器将保持连接打开,那么错误就在您的客户端代码中,您需要确定如何检测数据结束(或发送某种ack以导致服务器关闭连接,或其他任何形式)。好,谢谢您的回答。我们的连接没有真正的协议,服务器会发送一条类似“您的帐户已成功注册”的消息,然后就结束了。我认为有一个很好的解决方案,我不想检查response.contains(例如“成功注册”)是否存在。@beeef:有一个协议,即使它是隐式的。听起来服务器应该正在关闭连接。。。但是坦率地说,如果您让服务器和客户端都使用HTTP,那么可能会更简单,因为几乎所有广泛使用的平台都支持HTTP……好的,谢谢您的回答。我们的连接没有真正的协议,服务器会发送一条类似“您的帐户已成功注册”的消息,然后就结束了。我认为有一个很好的解决方案,我不想检查response.contains(例如“成功注册”)是否存在。@beeef:有一个协议,即使它是隐式的。听起来服务器应该正在关闭连接。。。但是坦率地说,如果让服务器和客户机都使用HTTP,这可能会更简单,因为几乎所有广泛使用的平台都支持HTTP。。。