在Java中创建服务器socket时,是否可以出现IO异常?
我有以下代码:
Socket clientSocket = null;
try {
clientSocket = serverSocket.accept();
} catch (IOException e) {
System.err.println("Accept failed.");
System.exit(1);
}
代码取自java.sun.com
关于上述代码的简短部分,我有几个问题
我们为什么要抓住一个例外。我认为当我们使用输入输出方法(而不是网络方法)时,IOException可能会发生
“System.err.println”和“System.println”之间有什么区别
在catch语句中,我们有“e”。为何我们用后者吗
# 1 楼答案
网络也是输入/输出。字节流通过套接字
第一个写入stderr,第二个不存在
对异常进行引用,以便在必要时记录或重新浏览异常
# 2 楼答案
accept引发IOException的一个常见原因是文件句柄不足。创建套接字需要两个文件句柄,如果用完,会出现“打开的文件太多”之类的错误
# 3 楼答案
(a)在此代码中,您不是在“创建服务器套接字”,而是在接受来自服务器套接字的套接字
(b)由于很多原因可能会失败,包括关闭ServerSocket;FDs耗尽;网络堆栈问题;内存耗尽。。。所以它抛出了一个异常