如何检查套接字的输出流是否已关闭?

Rom*_*man 3 java sockets networking outputstream

我有这个代码:

public void post(String message) {
    output.close();
    final String mess = message;
    (new Thread() {
        public void run() {
            while (true) {
                try {
                    output.println(mess);
                    System.out.println("The following message was successfully sent:");
                    System.out.println(mess);
                    break;
                } catch (NullPointerException e) {
                    try {Thread.sleep(1000);} catch (InterruptedException ie) {}
                }
            }
        }
    }).start();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我在代码的最开头关闭套接字,然后try使用它将一些信息发送到另一台计算机.该程序写道:"以下消息已成功发送".这意味着没有抛出NullPointerException.

那么,如果Java尝试使用套接字的封闭输出流,那么它是否会抛出异常?有没有办法检查套接字是关闭还是打开?

添加

我通过以下方式初始化套接字:

clientSideSocket = new Socket(hostname,port);
PrintWriter out = new PrintWriter(clientSideSocket.getOutputStream(), true);
browser.output = out;
Run Code Online (Sandbox Code Playgroud)

And*_*lci 7

我应该看起来更好.从PrintWriter的javadoc:

此类中的方法永远不会抛出I/O异常,尽管它的一些构造函数可能会.客户端可以通过调用{@link #checkError checkError()}来查询是否发生了任何错误.