import java.io.*; import java.net.*; import java.util.*; public class PingClientTimer { public static void main(String[] args) throws Exception { int lastSeen = -1; // Get command line argument. if (args.length != 2) { System.out.println("Required arguments: host, port"); return; } InetAddress Server = InetAddress.getByName(args[0]); int port = Integer.parseInt(args[1]); DatagramSocket socket = new DatagramSocket(); socket.setSoTimeout(2000); Timer myTimer = new Timer(); // Sender extends TimerTask. Sender mySender = new Sender(socket, Server, port); /* Schedule mySender's run() to run every second, starting * immediately. */ myTimer.scheduleAtFixedRate(mySender, 0, 1000); // Processing loop. for (int i = 0; i < 10; i++) { /*Date SendTime = new Date(); String Request = new String("PING " + i + " " + SendTime.getTime()+ "\n"); byte[] RequestBuffer = Request.getBytes(); DatagramPacket RequestPacket = new DatagramPacket(RequestBuffer, RequestBuffer.length, Server, port); socket.send(RequestPacket); */ DatagramPacket ReplyPacket = new DatagramPacket(new byte[1024], 1024); try { socket.receive(ReplyPacket); } catch(Exception E) { System.out.println(i + " Timed out"); continue; } Date ReceiveTime = new Date(); String Reply = new String(ReplyPacket.getData(), 0, ReplyPacket.getLength()); Scanner ReplyScanner = new Scanner(Reply).useDelimiter("\\s+"); ReplyScanner.next(); int count = ReplyScanner.nextInt(); if (count != lastSeen + 1) System.out.println(count + " " + i + " Message received out of order"); else { long echoTime = ReceiveTime.getTime() - ReplyScanner.nextLong(); System.out.println(count + " " + echoTime); } lastSeen = count; } myTimer.cancel(); } } class Sender extends TimerTask { DatagramSocket socket; InetAddress Server; int port; int i = 0; public Sender(DatagramSocket socket, InetAddress Server, int port) { this.socket = socket; this.Server = Server; this.port = port; } public void run() { Date SendTime = new Date(); String Request = new String("PING " + i + " " + SendTime.getTime()+ "\n"); byte[] RequestBuffer = Request.getBytes(); DatagramPacket RequestPacket = new DatagramPacket(RequestBuffer, RequestBuffer.length, Server, port); try { socket.send(RequestPacket); } catch(Exception e) { } i++; } }