检查Solaris中的特定端口是否空闲

问题描述 投票:0回答:2

我在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,这是错误的行为。它应该抛出一个异常,说明Address已经在使用并返回false。请建议我哪个好主意甚至在Solaris中都有用

java solaris serversocket
2个回答
0
投票

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


0
投票

我已经找到了问题,它与Solaris机器中的IPV4和IPV6问题有关。 C进程正在打开IPV4端口,Java的代码片段ServerSocket(port).close();正在检查IPV6端口。所以这就是原因,即使端口(IPV4)已经在使用,它也不会在Java中引发任何异常。

© www.soinside.com 2019 - 2024. All rights reserved.