检查特定端口在Solaris中是否可用

时间:2018-09-05 08:51:36

标签: java solaris serversocket

我在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中也可以使用

2 个答案:

答案 0 :(得分:0)

我认为,您有一个活动防火墙阻止了对端口的访问。 另一方面,检查您的应用程序,天气是否仅启动本地连接

答案 1 :(得分:0)

我已经弄清楚了问题所在,这是Solaris计算机中的IPV4和IPV6问题。 C进程正在打开IPV4端口和Java的代码片段 ServerSocket(port).close();正在检查IPV6端口。因此,即使端口(IPV4)已在使用中,它也不会在Java中引发任何异常。