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.

70 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. class UDPTimeCounterClientPing {
  8. public static void main(String args[]) throws Exception {
  9. String hostname = "";
  10. int udpPort = 36038;
  11. BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
  12. byte[] sendData = new byte[1024];
  13. byte[] receiveData = new byte[1024];
  14. // Socket erzeugen
  15. DatagramSocket clientSocket = new DatagramSocket();
  16. // Hostname vom Benutzer anfragen auf dem der Server l�uft
  17. System.out.println("Bitte geben Sie die Server-Adresse ein: ");
  18. hostname = inFromUser.readLine();
  19. InetAddress IPAddress = InetAddress.getByName(hostname);
  20. // Gew�nschte Anzahl von Pings vom Benutzer abfragen
  21. System.out.println("Bitte geben Sie die Anzahl gew�nschter Pings ein: ");
  22. Long pingCount = new Long(inFromUser.readLine());
  23. // bei jedem Ping wird Z�hlerstand auf dem Server um 1 erh�ht
  24. Long number = new Long(1);
  25. sendData = number.toString().getBytes();
  26. // Paket f�r Empfang erzeugen
  27. DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  28. long average = 0; // Variable zur Ermittlung des durchschnittlichen Delays
  29. // Pings ausf�hren
  30. for (long i = 0; i < pingCount; i++) {
  31. // Anfrage an Server senden
  32. long timestampStart = System.currentTimeMillis();
  33. DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, udpPort);
  34. clientSocket.send(sendPacket);
  35. // Antwort von Server empfangen
  36. receivePacket = new DatagramPacket(receiveData, receiveData.length);
  37. clientSocket.receive(receivePacket);
  38. // Delay aus Zeit zwischen Zeitstempeln vor Versand und nach Empfang berechnen
  39. long timestampEnd = System.currentTimeMillis();
  40. long delay = timestampEnd - timestampStart;
  41. // Delay auf Variable f�r Ermittlung des durchschnittlichen Delays addieren
  42. average += delay;
  43. System.out.println("Delay = " + delay + " ms");
  44. // 1 Sekunde warten
  45. Thread.sleep(1000);
  46. }
  47. // Durchscnitt berechnen und ausgeben
  48. System.out.println("Durchschnitt: " + (average / (float) pingCount) + " ms");
  49. System.out.println(System.lineSeparator());
  50. // Antwort vom Server ausgeben
  51. String result = new String(receivePacket.getData());
  52. System.out.println("Letzte Ausgabe vom Server:" + System.lineSeparator() + result);
  53. System.out.println(System.lineSeparator());
  54. // Socket schlie�en
  55. clientSocket.close();
  56. }
  57. }