3

我有以下代码,我正在尝试通过套接字发送数据文本。但是当我尝试通过 发送时PrintWriter,我的客户什么也不做,它停在in.readLine(). 但是,当我简单地使用 OutputStream 并将其作为字节发送时,我的客户端在读取时没有任何问题。有可能如我所愿吗?

        out = new PrintWriter(sock.getOutputStream());
        in = new BufferedReader(new InputStreamReader(sock.getInputStream()));

        while (true) {
            System.out.println("SERVER-THREAD: IP "
                    + sock.getInetAddress().getHostAddress());
            out.write(marshall() + "\n");
            Thread.sleep(1000);
        }

//客户

            in = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            out = new PrintWriter(sock.getOutputStream());

            while (updateList) {
                System.out.println("Before");
                String inputip = in.readLine();
                System.out.println("CLIENT: " + inputip);
                //unmarshall(in);
                System.out.println("After");
                Thread.sleep(1000);
            }
4

2 回答 2

5

PrintWriter缓冲要写入的数据,因此在缓冲区满之前不会这样做。你需要在这里调用flush

out.flush();
于 2012-12-01T13:34:29.073 回答
3

当您执行 readLine() 时,它会等到它读取整行。即一条新线。

您的发送正在发送没有换行符的文本,因此接收等待不会发生的事情。

一个更基本的问题是您正在混合文本和二进制文件,这更容易混淆而不是有用。

我建议您使用 PrintWriter.println() 编写文本,您可以使用 BufferedReader.readLine() 读取该文本。

于 2012-12-01T13:33:51.083 回答