forked from srieger/verteilte-systeme-bsc-ai-examples
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
70 lines
2.5 KiB
package verteiltesysteme.socket.timecounter;
|
|
|
|
import java.io.BufferedReader;
|
|
import java.io.InputStreamReader;
|
|
import java.net.DatagramPacket;
|
|
import java.net.DatagramSocket;
|
|
import java.net.InetAddress;
|
|
|
|
class UDPTimeCounterClientPing {
|
|
public static void main(String args[]) throws Exception {
|
|
String hostname = "";
|
|
int udpPort = 36038;
|
|
BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
|
|
byte[] sendData = new byte[1024];
|
|
byte[] receiveData = new byte[1024];
|
|
|
|
// Socket erzeugen
|
|
DatagramSocket clientSocket = new DatagramSocket();
|
|
|
|
// Hostname vom Benutzer anfragen auf dem der Server läuft
|
|
System.out.println("Bitte geben Sie die Server-Adresse ein: ");
|
|
hostname = inFromUser.readLine();
|
|
InetAddress IPAddress = InetAddress.getByName(hostname);
|
|
|
|
// Gewünschte Anzahl von Pings vom Benutzer abfragen
|
|
System.out.println("Bitte geben Sie die Anzahl gewünschter Pings ein: ");
|
|
Long pingCount = new Long(inFromUser.readLine());
|
|
// bei jedem Ping wird Zählerstand auf dem Server um 1 erhöht
|
|
Long number = new Long(1);
|
|
sendData = number.toString().getBytes();
|
|
|
|
// Paket für Empfang erzeugen
|
|
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
|
|
|
|
long average = 0; // Variable zur Ermittlung des durchschnittlichen Delays
|
|
|
|
// Pings ausführen
|
|
for (long i = 0; i < pingCount; i++) {
|
|
// Anfrage an Server senden
|
|
long timestampStart = System.currentTimeMillis();
|
|
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, udpPort);
|
|
clientSocket.send(sendPacket);
|
|
|
|
// Antwort von Server empfangen
|
|
receivePacket = new DatagramPacket(receiveData, receiveData.length);
|
|
clientSocket.receive(receivePacket);
|
|
// Delay aus Zeit zwischen Zeitstempeln vor Versand und nach Empfang berechnen
|
|
long timestampEnd = System.currentTimeMillis();
|
|
long delay = timestampEnd - timestampStart;
|
|
// Delay auf Variable für Ermittlung des durchschnittlichen Delays addieren
|
|
average += delay;
|
|
System.out.println("Delay = " + delay + " ms");
|
|
|
|
// 1 Sekunde warten
|
|
Thread.sleep(1000);
|
|
}
|
|
|
|
// Durchschnitt berechnen und ausgeben
|
|
System.out.println("Durchschnitt: " + (average / (float) pingCount) + " ms");
|
|
System.out.println(System.lineSeparator());
|
|
|
|
// Antwort vom Server ausgeben
|
|
String result = new String(receivePacket.getData());
|
|
System.out.println("Letzte Ausgabe vom Server:" + System.lineSeparator() + result);
|
|
System.out.println(System.lineSeparator());
|
|
|
|
// Socket schließen
|
|
clientSocket.close();
|
|
}
|
|
}
|