Ping a serverTag(s): Networking
It's not possible to really "ping" a machine to check if it's alive or not (it's a long story, but to keep it short I will just say that the Socket class is not low-level enough for that operation). But we can emulate a ping by talking the "echo port". On a server, the echo port is always port 7. We write a string to that port and the server will echo the string.
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();} } } }
Since JDK1.5, java.net.InetAddress.isReachable(int) can be used to check if a server is reachable or not.
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"); } } }