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.
50 lines
1.9 KiB
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);
|
|
}
|
|
}
|
|
}
|