You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

55 lines
2.5 KiB

  1. package verteiltesysteme.socket.timecounter;
  2. import java.io.BufferedReader;
  3. import java.io.InputStreamReader;
  4. import java.net.DatagramPacket;
  5. import java.net.DatagramSocket;
  6. import java.net.InetAddress;
  7. import java.text.DateFormat;
  8. import java.text.SimpleDateFormat;
  9. import java.util.Date;
  10. class UDPTimeCounterClient {
  11. public static void main(String args[]) throws Exception {
  12. String hostname = "";
  13. int udpPort = 36038;
  14. BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
  15. DatagramSocket clientSocket = new DatagramSocket();
  16. byte[] sendData = new byte[1024];
  17. byte[] receiveData = new byte[1024];
  18. DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
  19. System.out.println("Bitte geben Sie die Server-Adresse ein: ");
  20. hostname = inFromUser.readLine();
  21. InetAddress IPAddress = InetAddress.getByName(hostname);
  22. System.out.println("Bitte geben Sie eine Zahl ein: ");
  23. Long number = new Long(inFromUser.readLine());
  24. sendData = number.toString().getBytes();
  25. System.out.println(System.lineSeparator());
  26. long timestampStart = System.currentTimeMillis();
  27. System.out.println("Zeit vor Versand = " + timestampStart + " ms, " + df.format(new Date(timestampStart)));
  28. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, udpPort);
  29. clientSocket.send(sendPacket);
  30. long timestampSent = System.currentTimeMillis();
  31. System.out.println("Zeit nach Versand = " + timestampSent + " ms, " + df.format(new Date(timestampSent)));
  32. DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  33. clientSocket.receive(receivePacket);
  34. long timestampEnd = System.currentTimeMillis();
  35. System.out.println("Zeit nach Empfang = " + timestampEnd + " ms, " + df.format(new Date(timestampEnd)));
  36. long delay = timestampEnd - timestampStart;
  37. System.out.println("Delay = " + delay + " ms");
  38. System.out.println(System.lineSeparator());
  39. String result = new String(receivePacket.getData());
  40. System.out.println("Ausgabe vom Server:" + System.lineSeparator() + result);
  41. long timestampServer = new Long(result.split(" ")[2]).longValue();
  42. float oneWayDelayEstimate = (timestampEnd - timestampSent) / 2;
  43. float timestampSkew = timestampServer - timestampSent - oneWayDelayEstimate;
  44. System.out.println("Zeitversatz zwischen Server und Client ca. = " + timestampSkew + " ms");
  45. System.out.println(System.lineSeparator());
  46. clientSocket.close();
  47. }
  48. }