Gibt es eine Möglichkeit zu prüfen, ob der remote UDT Port beim Server mit Timeout erreichbar ist?
Ein Server sollte hinter keiner Firewall stehen und mit TCP funktioniert es auch.
Für TCP funktioniert es wie folgt:
|
Java-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
/**
* check, if the remote port is open
*
* @param hostname hostname or ip address
* @param port number of port to check
* @param timeout timeout in seconds
*/
public static boolean checkIfRemotePortAvailable (String hostname, int port, int timeout) throws SocketException {
Socket s = new Socket();
s.setReuseAddress(true);
SocketAddress sa = new InetSocketAddress(hostname, port);
try {
s.connect(sa, timeout * 1000);
} catch (IOException e) {
return false;
} finally {
if (s.isConnected()) {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
return true;
} else {
return false;
}
}
}
|
Da UDT auf UDP basiert, aber reliable ist, hatte ich mal folgendes für UDP versucht:
|
Java-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
/**
* check, if the remote udp port is open
*
* @param hostname hostname or ip address
* @param port number of port to check
* @param timeout timeout in seconds
*
* @return true, if port is open
*/
public static boolean checkIfUDPPortIsOpen (String hostname, int port, int timeout) {
try{
//create inet address
InetAddress address = InetAddress.getByName(hostname);
byte [] bytes = new byte[128];
DatagramSocket ds = new DatagramSocket();
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
ds.setSoTimeout(timeout);
ds.connect(address, port);
ds.send(dp);
ds.isConnected();
dp = new DatagramPacket(bytes, bytes.length);
ds.receive(dp);
ds.close();
return true;
} catch(InterruptedIOException e){
//System.out.println("closed");
return false;
} catch(IOException e){
//System.out.println("closed");
return false;
}
}
|
Dies funktioniert aber nicht so richtig.
Hat jemand einen Tipp, wie man einen UDT Port prüfen könnte?