2

次の方法を使用して、ポート 80 が使用可能かどうかを確認します。

ソケット: Java を使用してポートの可用性を検出する

ポート 80 が使用可能かどうかをチェックする Java アプリケーションがあります。使用可能な場合は、ポート 80 でリッスンする小さな Web サーバーを実行します。別の Java アプリケーションがポート 80 でリッスンしているかどうかを検出するのに最適です。たとえば、アプリケーションを 2 回実行した場合、 2 番目のインスタンスは、ポート 80 が使用されていることを正しく伝えます。

問題は、WAMP を実行してポート 80 でリッスンしていることと、WAMP を開始した後に Java アプリケーションを実行しても、ポート 80 がビジーであることが通知されないことです。別のJavaアプリケーションがポート80を使用しているかどうかだけを教えてくれるようです.

それは私の理解を超えています...どんな助けも大歓迎です!

コードスニペット:

int port = 80;
if(!Connection.isPortAvailable(port)) {
    logger.info("Port " + port + " is already in use");
}
// in Connection class
public static boolean isPortAvailable(int port) {
    ServerSocket ss = null;
    DatagramSocket ds = null;
    try {
        ss = new ServerSocket(port);
        ss.setReuseAddress(true);
        ds = new DatagramSocket(port);
        ds.setReuseAddress(true);
        return true;
    } catch (IOException e) {
    } finally {
        if (ds != null) {
            ds.close();
        }

        if (ss != null) {
            try {
                ss.close();
            } catch (IOException e) {
                /* should not be thrown */
            }
        }
    }

    return false;
}
4

2 に答える 2

2

この性質のすべての質問に対する正しい答えは、それを使用して例外をキャッチすることです。利用可能かどうかを確認してから使用しようとしても、いくつかの明らかな問題がある例外を処理する必要があります。

  1. 「参照」と「試行」の間にタイミング ウィンドウがあり、その間に状況が変化する可能性があります (双方向)。
  2. とにかく、「使用」部分で失敗をキャッチする必要があります。
  3. 基本的には、未来を予測しようとしているだけです。これは占いではなく、コンピュータ サイエンスのはずです。

これは、ネットワーク ポート、ファイル、実際のリソースなど、'it' のほとんどの値に適用されます。

于 2013-03-31T00:06:53.227 に答える