java - 为什么Java中的ServerSocket与netstat -ant不一致?

标签 java

我在下面编写了一个简单的 Java 方法来检查端口 21 是否在 Fedora Linux 中使用。据报道它已经投入使用。

protected static boolean isPortInUseTCP(final int port)
{
    Log.info("Checking TCP ports [" + port + "]", Verbosity.MEDIUM);

    // Checks to see if the port is available (not in use), otherwise drop
    // into the catch block if it is already used
    try (ServerSocket ss = new ServerSocket(port))
    {
        ss.setReuseAddress(true);

        Log.info("Port number [" + port + "] not found via TCP port", Verbosity.MEDIUM);

        return false;
    }

    catch (IOException exc)
    {
        Log.info("Port number [" + port + "] found via TCP port", Verbosity.MEDIUM);
    }

    return true;
}

但是当检查 netstat -ant 以查看它是否与 Java 一致时,它没有显示正在使用的端口 21?为什么? enter image description here

最佳答案

您的 Java 代码不显示端口 21 是否正在使用。它显示您是否可以收听21。由于 21 是一个特权端口,因此您收到的异常可能会提示缺少特权。

不要对异常做出假设。在这里,您完全忽略了一个,假设它与正在使用的端口有关,而不是与没有监听该端口所需的权限有关。

如果您以 root 身份运行 Java 程序(这是一个坏主意),您应该会看到该端口未被使用。

关于java - 为什么Java中的ServerSocket与netstat -ant不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369288/

相关文章:

java - spring security第一次登录失败,第二次登录成功

java - 如何增强我的 AddressBook addEntry() 方法?

java - 将 LAN 数据包从 Android 发送到 PC

java - IO/网络绑定(bind) Fork/Join-Tasks

java - 如何在多个集合中找到最受欢迎的元素

java - 如何在 IntelliJ IDEA 中创建 JavaFX Maven 项目?

java - 集成jsf、spring、hibernate。如何将 Spring bean 注入(inject) JSF 托管 bean 中?

java - 在 Spring Data JPA 查询中将整数转换为字符串

java - 从 Java/Android 线程返回值

java - 按钮打开 Activity 特定