Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-服务器和客户端不交互(套接字)_Java - Fatal编程技术网

Java-服务器和客户端不交互(套接字)

Java-服务器和客户端不交互(套接字),java,Java,我目前正在开发一个小型聊天程序。我有一个问题,那两个类是包含套接字的clientside和serverside的类。我想让他们进行交互,从服务器向客户端发送字符串,但显然没有收到字符串。我也没有得到一个错误。有人能解释一下,为什么会发生这种情况,或者如何解决它吗 来自客户端的代码片段: try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));

我目前正在开发一个小型聊天程序。我有一个问题,那两个类是包含套接字的clientside和serverside的类。我想让他们进行交互,从服务器向客户端发送字符串,但显然没有收到字符串。我也没有得到一个错误。有人能解释一下,为什么会发生这种情况,或者如何解决它吗

来自客户端的代码片段:

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”)

发布客户的全部代码发布客户的全部代码