package verteiltesysteme.socket.timecounter; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; class UDPTimeCounterClient { public static void main(String args[]) throws Exception { String hostname = ""; int udpPort = 36038; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss"); System.out.println("Bitte geben Sie die Server-Adresse ein: "); hostname = inFromUser.readLine(); InetAddress IPAddress = InetAddress.getByName(hostname); System.out.println("Bitte geben Sie eine Zahl ein: "); Long number = new Long(inFromUser.readLine()); sendData = number.toString().getBytes(); System.out.println(System.lineSeparator()); long timestampStart = System.currentTimeMillis(); System.out.println("Zeit vor Versand = " + timestampStart + " ms, " + df.format(new Date(timestampStart))); DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, udpPort); clientSocket.send(sendPacket); long timestampSent = System.currentTimeMillis(); System.out.println("Zeit nach Versand = " + timestampSent + " ms, " + df.format(new Date(timestampSent))); DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); clientSocket.receive(receivePacket); long timestampEnd = System.currentTimeMillis(); System.out.println("Zeit nach Empfang = " + timestampEnd + " ms, " + df.format(new Date(timestampEnd))); long delay = timestampEnd - timestampStart; System.out.println("Delay = " + delay + " ms"); System.out.println(System.lineSeparator()); String result = new String(receivePacket.getData()); System.out.println("Ausgabe vom Server:" + System.lineSeparator() + result); long timestampServer = new Long(result.split(" ")[2]).longValue(); float oneWayDelayEstimate = (timestampEnd - timestampSent) / 2; float timestampSkew = timestampServer - timestampSent - oneWayDelayEstimate; System.out.println("Zeitversatz zwischen Server und Client ca. = " + timestampSkew + " ms"); System.out.println(System.lineSeparator()); clientSocket.close(); } }