我有这段代码:
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();
}
如您所见,我在代码的最开头关闭套接字,然后try
使用它将一些信息发送到另一台计算机。该程序写道:“以下消息已成功发送”。这意味着没有抛出NullPointerException。
那么,如果Java尝试使用套接字的封闭输出流,那么它是否会抛出异常?有没有办法检查套接字是关闭还是打开?
ADDED
我按以下方式初始化套接字:
clientSideSocket = new Socket(hostname,port);
PrintWriter out = new PrintWriter(clientSideSocket.getOutputStream(), true);
browser.output = out;
答案 0 :(得分:7)
我应该看起来更好。来自PrintWriter的javadoc:
此类中的方法永远不会抛出I / O. 例外,虽然它的一些 施工人员可以。客户可以 询问是否有任何错误 通过调用{@link发生 #checkError checkError()}。
答案 1 :(得分:3)
(a)不要在网络上使用PrintStream或PrintWriter,因为它们会抑制异常。它们实际上仅用于日志文件或控制台,在那里您并不关心这一切。通过网络,您正在使用协议,您需要立即了解故障。
(b)如果您关闭了输入或输出,Socket.isClosed()将返回true。注意它不告诉你另一个人是否关闭了连接 - 这不是它的功能。只有阅读EOS才能告诉你。