2011-10-03 70 views
0

我已经创建了一个简单的方法来尝试确定套接字是否在远程机器上打开。这里是我的代码:使用java在远程计算机上打开ServerSocket?

public static Boolean isPortAvailable(int port, String bindAddr ) { 
    try { 
     System.out.println("IP: " + InetAddress.getByName(bindAddr)); 
     ServerSocket srv = new ServerSocket(port, 0, InetAddress.getByName(bindAddr)); 

     srv.close(); 
     srv = null; 
     return true; 

    } catch (IOException e) { 
     return false; 
    } 
} 

传递这有两个参数:

String bindAddr = "remotemachinename"; 
int port = 1719; 

它继续告诉我的端口不可用,但如果我尝试在机器上的netstat -a我看到它显然不是正在使用。我错过了什么吗?

+0

作为两个答案都告诉你,你已经完全误解了ServerSocket的构造做什么。您无法使用它在远程计算机上打开ServerSocket。那将如何工作? –

回答

3

如果您想联系侦听(服务器)插座,您应该使用Socket而不是ServerSocket。看到ServerSocket javadoc,将ServerSocket构造函数的第三个参数是本地地址绑定到,而不是一个远程地址连接到。

试试这个:

try { 
    InetAddress addr = InetAddress.getByName(bindAddr); 
    Socket sock = new Socket(); 
    SocketAddress sockaddr = new InetSocketAddress(addr, port); 
    int timeout = 1000; // wait for 1 second = 1000ms (adapt to your use case) 
    sock.connect(sockaddr, timeout); 
} catch (UnknownHostException e) { 
} catch (SocketTimeoutException e) { 
    // nobody's listening or willing to accept our connection... 
} catch (IOException e) { 
} 
+0

这样做......不知道我是如何错过的。再次感谢! – Paul

0

你所缺少的就是忽略你的IOException异常这可能是告诉你,你不能假装是另一台服务器。我建议你只选择忽略预计例外

为@fvu建议使用套接字,并返回一个boolean不是Boolean

相关问题