使用 当我使用 如果我为 String发送 int 和 null , Buffered 方式的客户端会读取-1 我希望我的英语有道理。 ; P 这就是代码: 服务器: 客户端:BufferedWriter
对象的服p>
BufferedReader
和OutputStream
用于服务器,PrintWriter
和InputStream
用于客户端时效果很好。 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();
}
}
}
答案 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()
做的主要事情之一(大多数时候)正在刷新剩下的最后一个数据。迷你缓冲区“。
资源: