为什么我的客户端没有正确读取服务器发送的outputStream?

时间:2010-09-29 21:45:55

标签: java sockets stream client-server bufferedreader

使用BufferedWriter对象的服p>

当我使用BufferedReaderOutputStream用于服务器PrintWriterInputStream用于客户端时效果很好。

如果我为 String发送 int null Buffered 方式的客户端会读取-1

我希望我的英语有道理。 ; P

这就是代码:

服务器

Scanner

客户端

import java.io.*;
import java.net.*;

public class Server {

    public static void main(String[] args) throws IOException {

        ServerSocket server = new ServerSocket(8189);
        Socket incoming;

        incoming = server.accept();
        try {
            // OutputStream output = incoming.getOutputStream();
            // PrintWriter outStream = new PrintWriter(output, true /*autoFlush*/);
            // outStream.println("ENTER");
            BufferedWriter output = new BufferedWriter(new           
                                    OutputStreamWriter(incoming.getOutputStream()));
            output.write(3);
            System.out.println("\nSent");

        } finally {
            incoming.close();
        }
    }
}

2 个答案:

答案 0 :(得分:3)

尝试在output.write(3);

之后输入以下代码
output.flush();

BufferedOutputStream构建为仅在缓冲区已满时发送数据(我相信默认的1024字节)。因此,要强制发送数据,您需要刷新流。

答案 1 :(得分:1)

您必须刷新数据才能在客户端部分接收它们。

        output.write(3);
        output.flush();
        System.out.println("\nSent");

如果你有一个OutputStream(或一个Writer),你必须刷新你的数据,这样你就可以100%确定你要发送的内容已被发送。

大多数(如果不是全部)OutputStream子类使用“迷你缓冲区”,只有在它已满或者手动调用flush()时才会刷新。在你的情况下,它更加明目张胆,因为你使用的是BufferedWriter

另一件事,当你使用流/编写器时,你真的应该在完成后关闭它们,close()做的主要事情之一(大多数时候)正在刷新剩下的最后一个数据。迷你缓冲区“。


资源: