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.

50 lines
1.9 KiB

package verteiltesysteme.socket.timecounter;
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 UDPTimeCounterServer {
// Variable für Zählerstand des Servers, dieser Zähler wird durch Anfragen der
// Clients erhöht
private static long counter = 0;
public static void main(String args[]) throws Exception {
int udpPort = 36038;
byte[] receiveData = new byte[1024];
byte[] sendData = new byte[1024];
DateFormat df = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss");
// Socket erzeugen
// Warnung, dass Socket nicht geschlossen wird unterdrücken ;)
@SuppressWarnings("resource")
DatagramSocket serverSocket = new DatagramSocket(udpPort);
System.out.println("Server ready... waiting for packets...");
while (true) {
// Anfrage vom Client empfangen
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
serverSocket.receive(receivePacket);
// Vom Client gesendete Zahl einlesen und auf aktuellen Zählerstand addieren
long number = new Long(new String(receivePacket.getData(), 0, receivePacket.getLength()));
counter += number;
// Absender IP-Adresse und Port für Rückversand (Antwort) ermitteln
InetAddress IPAddress = receivePacket.getAddress();
int clientSrcPort = receivePacket.getPort();
//System.out.println("Anfrage von Client " + IPAddress + ":" + clientSrcPort + " Zahl: " + number + " Zählerstand: " + counter);
// Antwort vom Server senden
String output = (Long.toString(counter) + " Zeit: " + System.currentTimeMillis() + " "
+ df.format(new Date(System.currentTimeMillis())));
//System.out.println("Antwort des Servers: " + output);
sendData = output.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, clientSrcPort);
serverSocket.send(sendPacket);
}
}
}