Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java在远程计算机上打开ServerSocket?_Java_Serversocket - Fatal编程技术网

使用java在远程计算机上打开ServerSocket?

使用java在远程计算机上打开ServerSocket?,java,serversocket,Java,Serversocket,我创建了一个简单的方法,试图确定远程机器上的套接字是否打开。这是我的密码: public static Boolean isPortAvailable( int port, String bindAddr ) { try { System.out.println("IP: " + InetAddress.getByName(bindAddr )); ServerSocket srv = new ServerSocket(port, 0, InetAdd

我创建了一个简单的方法,试图确定远程机器上的套接字是否打开。这是我的密码:

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,我发现它显然没有被使用。我遗漏了什么吗?

如果你想联系监听(服务器)套接字,你应该使用
socket
而不是
ServerSocket
。请参见,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) {
}

如果要联系侦听(服务器)套接字,应使用
socket
而不是
ServerSocket
。请参见,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) {
}

您缺少的是忽略IOException,这可能告诉您,您不能假装是另一台服务器。我建议您只忽略部分预期异常


按照@fvu的建议使用套接字,并返回一个
布尔值
而不是
布尔值
您缺少的是忽略IOException,这可能告诉您,您不能假装是另一台服务器。我建议您只忽略部分预期异常


按照@fvu的建议使用套接字,并返回一个
布尔值
而不是
布尔值

,因为这两个答案都告诉您,您完全误解了ServerSocket构造函数的功能。您不能使用它在远程计算机上打开ServerSocket。这到底是怎么回事?正如两个答案都告诉你的那样,你完全误解了ServerSocket构造函数的作用。您不能使用它在远程计算机上打开ServerSocket。那怎么行呢?就是这样…不知道我怎么会错过。再次感谢!就这样…不知道我怎么会错过。再次感谢!