3

したがって、私がやろうとしているのは、特定のポート (4444) のローカル ネットワークをスキャンし、そのポートが開いているかどうかを返すことです。私が今していることはこれです:

    private static boolean portIsOpen(String ip, int port, int timeout) {
        try {
            Socket socket = new Socket();
            socket.connect(new InetSocketAddress(ip, port), timeout);
            socket.close();
            return true;
        } catch (Exception ex) {
            return false;
        }
    }

この方法を使用して、ローカル ネットワーク上のサーバーを検索します (Minecraft のマルチプレイヤーと、ローカル ネットワークでオープン ゲームをスキャンする方法を考えてみてください)。私の問題は、このメソッドを使用するとサーバー側が壊れることです。サーバーは、何かが接続されたときにすぐにデータを送信するだけだからです。ポートに接続せずに、ポートが開いているかどうかを確認することはできますか?

4

1 に答える 1

1

ポートに接続せずに、ポートが開いているかどうかを確認することはできますか?

一言で言えば、No.

これをサポートする標準メカニズムはありません。これを行う唯一の方法は、ローカル ネットワーク上のすべてのマシンで、これを行うカスタム サービスを設計、実装、展開することです。


EJP が指摘しているように、適切に作成されたサービスは、データを送受信せずに TCP 接続をすぐに閉じるクライアントに対処できる必要があります。

しかし、あなたの目的が誰にもプローブに気付かれることなくこれを行うことである場合...それで頑張ってください!

于 2013-10-26T07:15:39.750 に答える