我无法在任何地方找到令人满意的答案.有人了解内部情况,请解释一下吗?
我写了一个简单的客户端/服务器来演示这个问题. 服务器读取一行文本然后关闭套接字.客户端写入一行文本,等待10秒,然后再写两行文本.第二次写入(10秒后)失败但第一次写入总是成功.
为什么BufferedWriter不能在第一次写入时抛出异常?在所有插座正常关闭很久之后.代码也在第一次写入之前读取套接字,返回-1表示输入端已经检测到套接字关闭.为什么输出端也不知道这个?
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket ss = new ServerSocket(9000);
Socket s = ss.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println(in.readLine());
s.close();
System.out.println("Socket closed");
}
}
public class Client {
public static void main(String[] args) throws IOException, InterruptedException {
Socket s = new Socket("localhost", 9000);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
out.write("Hello, World!\n"); out.flush();
Thread.sleep(10000);
System.out.println("Read from socket returns: " + s.getInputStream().read());
out.write("First write\n"); out.flush();
System.out.println("First write succeeded without …Run Code Online (Sandbox Code Playgroud)