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

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();
}
}