为了账号安全,请及时绑定邮箱和手机立即绑定

套接字:使用Java发现端口可用性

套接字:使用Java发现端口可用性

凤凰求蛊 2019-08-12 18:12:32
套接字:使用Java发现端口可用性如何使用Java以编程方式确定给定计算机中端口的可用性?即给定一个端口号,确定它是否已被使用?
查看完整描述

3 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

这是实现从Apache来骆驼项目:

/**
 * Checks to see if a specific port is available.
 *
 * @param port the port to check for availability
 */public static boolean available(int port) {
    if (port < MIN_PORT_NUMBER || port > MAX_PORT_NUMBER) {
        throw new IllegalArgumentException("Invalid start port: " + 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;}

他们还检查DatagramSocket以检查端口是否可用于UDP和TCP。

希望这可以帮助。


查看完整回答
反对 回复 2019-08-12
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

对于Java 7,您可以使用try-with-resource来获得更紧凑的代码:

private static boolean available(int port) {
    try (Socket ignored = new Socket("localhost", port)) {
        return false;
    } catch (IOException ignored) {
        return true;
    }}


查看完整回答
反对 回复 2019-08-12
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

从Java 7开始,David Santamaria的答案似乎不再可靠。但是,看起来您仍然可以可靠地使用Socket来测试连接。

private static boolean available(int port) {
    System.out.println("--------------Testing port " + port);
    Socket s = null;
    try {
        s = new Socket("localhost", port);

        // If the code makes it this far without an exception it means
        // something is using the port and has responded.
        System.out.println("--------------Port " + port + " is not available");
        return false;
    } catch (IOException e) {
        System.out.println("--------------Port " + port + " is available");
        return true;
    } finally {
        if( s != null){
            try {
                s.close();
            } catch (IOException e) {
                throw new RuntimeException("You should handle this error." , e);
            }
        }
    }}


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 495 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信