Für eine funktionierende Client-Server-Kommunikation benötigt das Programm eine Verbindung zu
einem Server - ein sogenannter "Socket". In Java ist eine Klasse "Socket" schon implementiert so daß man nur noch einen Konstruktor dieser Klasse aufrufen muß.
echoSocket = new Socket("szm.geist-soz.uni-karlsruhe.de", 7);
Dieser Socket öffnet eine Verbindung mit der SZM-Maschine auf Port 7, dem Echo-Port
Damit Daten auf der Verbindung fließen können, müssen 2 Ströme geöffnet sein. Ein
Schreibe-strom um dem Server Daten zu schicken:
out = new PrintWriter(echoSocket.getOutputStream(), true);
Und ein Lese-Strom um Daten vom Server zu lesen:
in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
Daten auf den Server zu schreiben ist relativ simpel. Dazu benutzt man einen
PrinterWriter (s.o.) und dazu die dazugehörige Methode
out.println(DATEN);
Damit Daten vom Server gelesen werden können wird eine verschachtelte Konstruktion von
Objekten der Klassen InputStreamReader und BufferedReader benutzt. Eine einfache Leseanweisung
vom Server lautet:
DATEN = in.readLine();
Die Tutoren von Sun nennen es "wohlerzogen", wenn Programme ihren Müll wegräumen. Unser Programm
sollte genauso "wohlerzogen" sein. Das heisst, dass wir den Output- und den InputStrom schließen
müssen und danach die Verbindung zu dem Server kappen.
out.close();
in.close();
echoSocket.close();
a.) Zu Beginn des Programms muss eine Methode aus der CSK (Client-Server-Kommunikation) aufgerufen werden, welche den SOCKET herstellt, sowie den OUTPUT- und den INPUTSTREAM öffnet.
b.) Am Ende des Programms wird eine Methode aufgerufen, welche den SOCKET und die STREAMS schließt.
c.) Für die Kommunikation werden 2 Methoden benötigt: Eine Methode, die auf den Server die Nachrichten schreibt - und eine Methode, die Nachrichten vom Server holt.
Problem: Nachrichten vom Server kommen nicht in regelmäßigen Abständen. Die optimale Programmierung würde über ein Eventhandler / Actionlistener erfolgen. Denkbar ist aber auch eine Schleifenkonstruktion.
Für a) und b) werden keine besonderen Übergabeparameter benötigt. Ein einfacher Aufruf genügt.
Für c) werden Strings als Übergabeparameter benötigt.