我在Solaris 11.3 SPARC计算机上遇到了一个奇怪的问题。我曾经使用java中的以下方法检查端口是否空闲(如果端口空闲则返回true,否则返回false)。
public static boolean isPortFree(int port) {
try {
new ServerSocket(port).close();
return true;
} catch (IOException e) {
System.out.println("Exception "+e.getMessage());
return false;
}
}
以上代码在Solaris以外的所有操作系统上均能正常工作。在Solaris计算机中,当我使用端口22进行测试时,它可以按预期工作,但是当我使用另一个进程正在使用的端口12345进行测试时,它返回true,这是错误的行为。它应该抛出一个异常,说明地址已在使用中并返回false。 请给我建议一个好主意,即使在Solaris中也可以使用
答案 0 :(得分:0)
我认为,您有一个活动防火墙阻止了对端口的访问。 另一方面,检查您的应用程序,天气是否仅启动本地连接
答案 1 :(得分:0)
我已经弄清楚了问题所在,这是Solaris计算机中的IPV4和IPV6问题。 C进程正在打开IPV4端口和Java的代码片段
ServerSocket(port).close();
正在检查IPV6端口。因此,即使端口(IPV4)已在使用中,它也不会在Java中引发任何异常。