使用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。那怎么行呢?就是这样…不知道我怎么会错过。再次感谢!就这样…不知道我怎么会错过。再次感谢!