# Server Client Anwendung mit UDP



## funlow (23. Jun 2015)

Ich habe momentan ein kleines Problem und hoffe man kann mir hier vielleicht sogar auf die Schnelle helfen.

Unzwar habe ich folgende Aufgabenstellung bekommen:
	
	
	
	





```
Implementieren Sie eine einfache Client-Server-Anwendung mit UDP:
 • Die Server-Anwendung wartet auf eine Nachricht, die aus einem einzelnen deutschen Wort bestehen soll, 
vom Client. Wenn eine solche eintriﬀt, schlägt der Server das Wort in einem einfachen 
deutsch-englischen W¨orterbuch nach und sendet dem Client das entsprechende englische Wort 
zur¨uck. Wenn ihm das Wort unbekannt ist, sendet er ”Word unknown”. 

• Die Client-Anwendung wartet darauf, dass der Nutzer ein Wort eingibt und 
mit Enter best¨atigt. Anschließend wird das Wort an den Server gesendet 
und die im Folgenden vom Server zur¨uckgesendete Nachricht ausgegeben.
```

Als Vorgaben haben wir 2 Beispielklassen für einen Server und einen Client bekommen:

```
public class Server {
 public static void main(String[] args) { 
try {
 int port=5555; 
DatagramSocket s = new DatagramSocket(port); 
byte[] buffer = new byte[256]; 
DatagramPacket p = new DatagramPacket(buffer, buffer.length); 
s.receive(p); // blockiert 
String mes = new String(buffer, 0, p.getLength());
 System.out.println(mes);
 System.out.println(p.getAddress()); 
System.out.println(p.getPort());
 s.close(); 
}catch(Exception e){ 
e.printStackTrace(); 
} 
} 
}
```


```
public class Client { 

public static void main(String[] args) { 
try { 
String host = "localhost"; 
int port=5555; InetAddress ia = InetAddress.getByName(host); 
DatagramSocket sock = new DatagramSocket(); 
byte[] buffer = "Hallo".getBytes(); 
DatagramPacket packet = new DatagramPacket(buffer, buffer.length,ia, port); 
sock.send(packet);
 sock.close(); 
}catch(Exception e){
 e.printStackTrace();
 }
 } 
}
```




Ich hab nun ein bisschen das Problem das ich nicht sicher bin wie ich die Sache angehen soll. Wie genau bekomme ich das hin gleichzeitig den Server und den Client laufen zu haben bzw. so im Sinner der Aufgabe vom Client ne Anfrage senden zu lassen und vom Server eine Antwort zurück an den Client.


----------



## Maggot (24. Jun 2015)

Also ich würde zuerst den Client schreiben, da der ja nicht viel zu tun hat:
 .) Auf eingabe warten
 .) eingabe an den Server schicken
Bis dahin kann es dein Beispiel ja schon.
 .) auf antwort warten
 .) antwort ausgeben

Wenn du das hast kannst du dich dem Server widmen. Alles was du brauchst bis zum warten auf die Nachricht kann dein Beispiel von oben ja schon. Jetzt dann nurnoch das empfangene Wort in nen Wörterbuch nachschlagen (das kann im ersten Versuch eine Map<String, String> sein die einfach ein paar Wörter beinhaltet) und dann zurücksenden. 

Wenn das alles soweit funktioniert kannst du dann statt der Map eine Datei verwenden die als Wörterbuch fungiert. Im Netz lässt sich sicher eine .txt Datei mit Deutsch-Englisch finden. Diese musst du dann nur noch parsen.


----------



## Tom299 (24. Jun 2015)

In deinem Beispiel hast du 2 verschiedene Programme, einen Server und einen Client. Die kannst du ja beide getrennt starten, also sollte das mit dem gleichzeitig laufen kein Problem sein. 
Normalerweise würde ich sowas mit Threads lösen, aber es geht auch ohne. Ich kenn aber die Vorgabe nicht und weiß auch nicht, ob du dich mit Threads auskennst. Du brauchst jedenfalls eine Schleife im Server und im Client. Der Server wartet in einer Schleife auf ein receive vom client, verarbeitet es, schickt die Antwort und wartet dann wieder. Du kannst ein Schlüsselwort zum beenden des Servers einbauen (z.b. exit). Beim Client sieht es ähnlich aus, es sei denn, er soll nur 1 Wort verarbeiten und sich wieder beenden, dann brauchst du hier keine Schleife. Macht aber eher wenig Sinn.
Und für Client-Server gibt es viele Beispiele im Netz (TCP und UDP), da solltest du genug finden ;-)


----------

