【发布时间】:2022-10-06 11:45:38
【问题描述】:
我试图将多行代码从客户端发送到服务器。
这是服务器端的代码
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(), true);
//read client input
//multi line
//https://stackoverflow.com/questions/43416889/java-filereader-only-seems-to-be-reading-the-first-line-of-text-document?newreg=2f77b35c458846dbb1290afce8853930
String line = \"\";
while((line =in.readLine()) != null) {
System.out.println(line);
}
System.out.println(\"is it here?\");
这是客户端的代码:
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
while (true) {
System.out.print(\"> \");
//content server input command (put, lamport clock, message)
String command = keyboard.readLine();
if (command.equals(\"quit\")){
break;
}
//read from CSDB/txt1.txt
String message = readFileReturnString(\"CSDB/txt1.txt\", StandardCharsets.UTF_8);
System.out.println(message);
//send to clientHandler through PrintWriter
out.println(command + \" 3 \\n\" + message);
//receive response from ClientHandler (lamport clock)
String serverResponse = input.readLine();
System.out.println(serverResponse + socket);
}
服务器端能够打印出从客户端发送的所有文本。但是,while 循环不会中断,并且 System.out.println(\"is it here?\");从未被执行过。
我可以知道为什么以及如何解决这个问题吗?
-
您需要关闭套接字。
-
但我想重用这个套接字。因为我可能不止一次地将消息从客户端发送到服务器。
-
然后你需要告诉服务器它什么时候应该退出循环。你可能会发送特殊的字符串或其他东西。
-
或者使用非阻塞
-
@g00se 它无济于事。
标签: java sockets while-loop bufferedreader java-io