Andreas Geggus

Andreas Geggus




Programmieren für das Internet


Client - Server - Kommunikation:

I. Grundlagen

1. Verbindung zwischen Client und Server

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

2. Lese- und Schreibe-Ströme öffnen

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

3. Lesen und Schreiben von und auf den Server

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

4. Client-Server-Verbindung schließen

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

II. Anbindung des Konzepts an das Projekt IRC-Client

1. Notwendigkeiten

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.

2. Schnittstellen

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.


Programme dazu