我在下面编写了一个简单的 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;
}
最佳答案
您的 Java 代码不显示端口 21
是否正在使用。它显示您是否可以收听21
。由于 21
是一个特权端口,因此您收到的异常可能会提示缺少特权。
不要对异常做出假设。在这里,您完全忽略了一个,假设它与正在使用的端口有关,而不是与没有监听该端口所需的权限有关。
如果您以 root
身份运行 Java 程序(这是一个坏主意),您应该会看到该端口未被使用。
关于java - 为什么Java中的ServerSocket与netstat -ant不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369288/