我目前正在开展一个小型聊天程序。我遇到的两个类是包含clientide和socket的服务器端的类。我希望他们进行交互,从服务器向客户端发送字符串,但字符串显然没有收到。我也没有收到错误。有人可以解释,为什么这种情况发生或如何修复呢?
来自客户的代码邮件:
try {
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while(true) {
System.out.println("WAITING");
System.out.println(br.readLine());
}
} catch(Exception ex) { ex.printStackTrace(); }
来自服务器的Codesnippet:
// Method of the code throws Exception
System.out.println("Waiting for someone to connect.");
Socket socket = serverSocket.accept();
System.out.println("Someone connected.");
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
while(true) {
System.out.println("WRITING");
pw.write("hi");
}
目前的输出是:
服务器:
WRITING
WRITING
WRITING
WRITING
WRITING
...
客户端:
WAITING //only once
答案 0 :(得分:3)
客户需要完整的一行:
br.readLine()
并阻止直到该行完成。
但是服务器只重复发送“hi”,而不发送任何EOL字符:
pw.write("hi");
因此该行永远不会结束,并且客户端会一直阻塞。
使用pw.println("hi");
答案 1 :(得分:1)
服务器缓冲区未刷新。如果您将pw.write(...)
更改为pw.println(...)
,则应该解决问题 - println(...)
自动刷新缓冲区