1

我有以下代码:

Socket clientSocket = null;
try {
   clientSocket = serverSocket.accept();
} catch (IOException e) {
   System.err.println("Accept failed.");
   System.exit(1);
}

代码取自java.sun.com

关于上面给出的代码的简短部分,我有几个问题。

  1. 为什么我们要捕获一个 IOException。我认为 IOException 是在我们使用输入输出方法(而不是网络方法)时可能发生的事情。

  2. “System.err.println”和“System.println”有什么区别?

  3. 在 catch 语句中,我们有“e”。做什么的?我们以后使用它吗?

4

3 回答 3

6

1:我们为什么要捕获一个IOException。我认为 IOException 是在我们使用输入输出方法(而不是网络方法)时可能发生的事情。

网络也是输入/输出。字节流通过套接字。

2:“System.err.println”和“System.println”有什么区别?

第一个写入stderr,第二个不存在。

3:在 catch 语句中我们有“e”。做什么的?我们以后使用它吗?

引用异常,以便您可以在必要时记录或重新抛出它。

于 2010-02-21T15:29:51.057 回答
1

(a) 您不是在此代码中“创建服务器套接字”,而是从 ServerSocket 接受 Socket。

(b) 失败的原因有很多,包括关闭 ServerSocket;FD用完;网络堆栈问题;内存耗尽;...所以它抛出 IOException。

于 2010-02-21T22:16:44.907 回答
0

accept 抛出 IOException 的一个常见原因是文件句柄用完。它需要两个文件句柄来创建套接字,如果你用完了你会得到一个错误,比如“打开的文件太多”

于 2010-02-21T21:35:30.717 回答