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に書き込み、2番目は存在しません。

3:catchステートメントには「e」があります。何のために?後者を使用しますか?

必要に応じてログに記録したり、再スローしたりできるように、例外への参照を取得します。

于 2010-02-21T15:29:51.057 に答える
1

(a)このコードでは、「サーバーソケットを作成している」のではなく、ServerSocketからソケットを受け入れています。

(b)ServerSocketの閉鎖を含む多くの理由で失敗する可能性があります。FDが不足しています。ネットワークスタックの問題。メモリの枯渇; ...したがって、IOExceptionがスローされます。

于 2010-02-21T22:16:44.907 に答える
0

AcceptがIOExceptionをスローする一般的な理由の1つは、ファイルハンドルが不足していることです。ソケットを作成するには2つのファイルハンドルが必要です。不足すると、「開いているファイルが多すぎます」などのエラーが発生します。

于 2010-02-21T21:35:30.717 に答える