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

时间:2015-04-03 14:40:49

标签: java

我目前正在开展一个小型聊天程序。我遇到的两个类是包含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

2 个答案:

答案 0 :(得分:3)

客户需要完整的一行:

br.readLine()

并阻止直到该行完成。

但是服务器只重复发送“h​​i”,而不发送任何EOL字符:

pw.write("hi");

因此该行永远不会结束,并且客户端会一直阻塞。

使用pw.println("hi");

答案 1 :(得分:1)

服务器缓冲区未刷新。如果您将pw.write(...)更改为pw.println(...),则应该解决问题 - println(...)自动刷新缓冲区

相关问题