这个示例不是真正实现ping用来检测是否alive,因为Socket类没有足够操作的权限,但是我们可以模仿ping,通过"echo port"实现,在server端,"echo port"端口一般是7,我们往这个端口写入一个字符串,然后这个server会返回这个字符串。
import java.io.*;
import java.net.*;
public class PseudoPing {
public static void main(String args[]) {
try {
Socket t = new Socket(args[0], 7);
DataInputStream dis = new DataInputStream(t.getInputStream());
PrintStream ps = new PrintStream(t.getOutputStream());
ps.println("Hello");
String str = dis.readLine();
if (str.equals("Hello"))
System.out.println("Alive!") ;
else
System.out.println("Dead or echo port not responding");
t.close();
}
catch (IOException e) {
e.printStackTrace();}
}
}
}
import java.io.*;
import java.net.*;
public class ReachableTest {
public static void main(String args[]) {
try {
InetAddress address = InetAddress.getByName("web.mit.edu");
System.out.println("Name: " + address.getHostName());
System.out.println("Addr: " + address.getHostAddress());
System.out.println("Reach: " + address.isReachable(3000));
}
catch (UnknownHostException e) {
System.err.println("Unable to lookup web.mit.edu");
}
catch (IOException e) {
System.err.println("Unable to reach web.mit.edu");
}
}
}
如果有权限的话isReachable()方法会使用ICMP ECHO REQUESTs;没权限的话会尝试在向目标主机的端口号7上建立tcp连接。 不过多数站点主机都禁用这个请求。