我在下面写了一个简单的Java方法来检查Portora 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;
}
答案 0 :(得分:2)
您的Java代码未显示端口21
是否正在使用中。它显示您是否可以在21
上收听。由于21
是一个特权端口,您获得的例外可能会抱怨缺少特权。
不要对异常做出假设。在这里你完全忽略了一个,假设它是关于正在使用的端口而不是没有所需的权限来监听该端口。
如果您将Java程序作为root
运行(一个坏主意),您应该会看到该端口未被使用。
答案 1 :(得分:0)
是的,你说得对,Port 21是一个特权端口,例外有人抱怨 - java.net.BindException: Permission denied (Bind failed)
。
当我在root中运行程序时,我得到了正确的答案。它说港口没有使用。所以我的问题是,我首先没有把自己升级为正确的特权。谢谢你指出我的错误。