Java-服务器和客户端不交互(套接字)
我目前正在开发一个小型聊天程序。我有一个问题,那两个类是包含套接字的clientside和serverside的类。我想让他们进行交互,从服务器向客户端发送字符串,但显然没有收到字符串。我也没有得到一个错误。有人能解释一下,为什么会发生这种情况,或者如何解决它吗 来自客户端的代码片段:Java-服务器和客户端不交互(套接字),java,Java,我目前正在开发一个小型聊天程序。我有一个问题,那两个类是包含套接字的clientside和serverside的类。我想让他们进行交互,从服务器向客户端发送字符串,但显然没有收到字符串。我也没有得到一个错误。有人能解释一下,为什么会发生这种情况,或者如何解决它吗 来自客户端的代码片段: try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
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(); }
来自服务器的代码片段:
// 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
服务器缓冲区未刷新。如果您将
pw.write(…)
更改为pw.println(…)
应该可以解决这个问题-println(…)
自动刷新缓冲区服务器缓冲区没有被刷新。如果您将pw.write(…)
更改为pw.println(…)
则应解决此问题-println(…)
自动刷新缓冲区客户端需要完整的行:
br.readLine()
并阻塞,直到线路完成
但服务器仅重复发送“hi”,从未发送任何EOL字符:
pw.write("hi");
因此,线路永远不会结束,客户机一直在阻塞
使用
pw.println(“hi”)代码>客户需要完整的行:
br.readLine()
并阻塞,直到线路完成
但服务器仅重复发送“hi”,从未发送任何EOL字符:
pw.write("hi");
因此,线路永远不会结束,客户机一直在阻塞
使用pw.println(“hi”)代码>发布客户的全部代码发布客户的全部代码