0

我有以下代码检查端口 443 是否在给定主机中打开。

import java.net.*;
import java.io.IOException;

public class Scan {

    public static void main (String[] args) {
        String host="put hostname here";
        int port=443;

        try{
            Socket s = new Socket(host,port);
            System.out.println("Can listen on port "+port+
                       " in host "+host+" is open");

        } //end try
        catch (IOException ex)
        {
            //remote host is not listening on port 443
            System.out.println("Can not listen on port "+port+
                       " of host "+host);
        } //end catch
    }
}

我的问题是:如果某个主机的 443 端口没有打开,这会使我的程序非常慢,因为我需要检查主机组。有什么方法可以改进代码以使扫描端口 443 更快,同时保持可靠性?除了使用套接字之外,还有什么方法可以使用 java 编程来进行端口扫描?

请注意,扫描前 ping 不会有帮助,因为我的主机名已连接,我只需要检查端口 443 是打开还是关闭。

4

1 回答 1

2

如果您必须扫描一组主机,只需在单独的线程中运行每个检查。这将确保一个主机不会阻止您处理其他主机。

长且独立的 IO 操作是多线程的经典用例。您甚至不必担心机器上的 CPU 数量,因为它们在等待网络响应时实际上什么都不做。加上别人建议的超时,也是一个合理的加法,除了多线程外,还可以用。

于 2012-07-04T08:33:29.657 回答