有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中创建服务器socket时,是否可以出现IO异常?

我有以下代码:

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

代码取自java.sun.com

关于上述代码的简短部分,我有几个问题

  1. 我们为什么要抓住一个例外。我认为当我们使用输入输出方法(而不是网络方法)时,IOException可能会发生

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

  3. 在catch语句中,我们有“e”。为何我们用后者吗


共 (3) 个答案

  1. # 1 楼答案

    1: Why do we want to catch an IOException. I though that IOException is something that can happen when we use input-output methods (not networking methods).

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

    2: What is the difference between the "System.err.println" and "System.println"?

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

    3: In the catch statement we have "e". What for? Do we use it latter?

    对异常进行引用,以便在必要时记录或重新浏览异常

  2. # 2 楼答案

    accept引发IOException的一个常见原因是文件句柄不足。创建套接字需要两个文件句柄,如果用完,会出现“打开的文件太多”之类的错误

  3. # 3 楼答案

    (a)在此代码中,您不是在“创建服务器套接字”,而是在接受来自服务器套接字的套接字

    (b)由于很多原因可能会失败,包括关闭ServerSocket;FDs耗尽;网络堆栈问题;内存耗尽。。。所以它抛出了一个异常