Java 从服务器读取多行
我对其他方法持开放态度,但这是我的代码:Java 从服务器读取多行,java,sockets,bufferedreader,stringbuilder,printwriter,Java,Sockets,Bufferedreader,Stringbuilder,Printwriter,我对其他方法持开放态度,但这是我的代码: public class Client { public static void main (String [] args) { try(Socket socket = new Socket("localhost", 7789)) { BufferedReader incoming = new BufferedReader(new InputStreamReader(socket.getInputStrea
public class Client {
public static void main (String [] args) {
try(Socket socket = new Socket("localhost", 7789)) {
BufferedReader incoming = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter outgoing = new PrintWriter(socket.getOutputStream(),true);
StringBuilder sb = new StringBuilder();
Scanner scanner = new Scanner(System.in);
String send = "";
String response = "";
while (!send.equals("logout")){
System.out.println("Enter Command: ");
send = scanner.nextLine();
outgoing.println(send);
while ((response = incoming.readLine()) != null) {
System.out.println(response);
sb.append(response);
sb.append('\n');
}
}
} catch (IOException e) {
System.out.println("Client Error: "+ e.getMessage());
}
}
}
我确实从服务器得到了响应,但是程序在while((response=incoming.readLine())!=null)的内部while循环中卡住了,所以我无法输入第二个命令。如果传入响应完成,如何中断循环?问题是
传入。readLine()
仅在套接字关闭时返回null
,否则它将阻塞并等待来自服务器的更多输入
如果可以更改服务器,则可以添加一些标记,表明请求已完全处理,然后在((response=incoming.readLine())!=“--finished-->”时按如下方式检查它
如果不能,请尝试以下操作:
while(response.isEmpty()){
if(incoming.ready()){ //check if there is stuff to read
while ((response = incoming.readLine()) != null){
System.out.println(response);
sb.append(response);
sb.append('\n');
}
}
}
您使用
while
循环检查send
是否不等于“logout”?是的,logout是断开连接的命令。之后,服务器只是在没有任何额外信息的情况下启动客户端。不幸的是,我无法更改服务器,它不是开源的,也不是我的。是否有其他方法仅从客户端获取所有数据?非常感谢。准备就绪是我需要的缺失部分。