Hallo Peter,

In diesem chatserver_Inf12.zip-Verzeichnis findest Du:
a) einen Chat-Server mit -Client auf Textbasis sowie
b) einen Chat-Webserver mit dynamischem HTML-Client auf Frame-Basis
   im Verzeichnis chatserver_frame und
c) eine Semaphorenimplementierung zur Erzeuger-Verbraucher-Problematik mit einfacher
   Textausgabe, aber sehr übersichtlicht in der Ausgabe.


a) Der Chat-Server kann auf der Konsole ("python chat-server_konsole.py") 
   oder im IDLE-Fenster geöffnet werden. Er listet alle Client-Nachrichten auf 
   und versendet diese sofort an alle Teilnehmer, außer an den Absender.
   Der Chat-Client ist als Thread implementiert, damit die verschränkten while-Wiederholungen
   von print-Ausgabe und raw_input-Eingabe sich schön ineinander verschränken.
   Doch sieht man bald, dass das unfreiwillige "Überschriebenwerden" durch die anderen
   Teilnehmer (auf der gleichen Maschine einfach mehrere Konsolen öffnen!), was die Funktionalität
   aber nie stört, etwas verwirrend sein kann.

b) Der Chat-Webserver muß wie zuvor vor dem Client gestartet werden ("python httpd.py").
   Als Client dient der Webbrowser, der über die URI "http://HOST:PORT/index.html" aufgerufen wird.
   Der dabei übergebene Nickname des Teilnehmers wird als Cookie auf dem Browser für 2h gespeichert
   und mit jedem weiteren Aufruf um diese 2h verlängert.
   Damit Ausgabe und Eingabe entkoppelt sind, wird auf der ausgelieferten Seite ("chat_frame.py")
   ein iframe integriert, in welchem sich die Ausgabeseite ("anzeige.py") laufend selber aktualisiert.
   Die Rahmenseite ruft sich nach Nachrichteneingabe immer selber auf.
   Die eingegebenen Nachrichten werden von chat_frame.py in der Datei "conversation.txt" gespeichert
   und von anzeige.py gelesen und ausgegeben.

   Um die Funktionalität des dynamisch erzeugten HTML zu erklären, habe ich im cgi-bin (dort müssen
   immer alle Serverskripte liegen) die "uhrzeit.py" abgelegt. An diesem Beispiel sieht man sehr schön, 
   wie die Uhrzeit dynamisch in das feste HTML-Korsett eingesetzt wird. 


Noch ein Hinweis zur Einrichtung des Servers:
Bei der Portangabe empfielt sich vielleicht eine hohe Portnummer, jedoch wäre 80 ideal,
weil man dann keinen Port mehr in der URI angeben muss - bei uns am IKG hat es funktioniert.
Hier in den Programmen ist Port 8000 voreingestellt.
Für den Chatserver war es bei uns erforderlich, nicht localhost oder 127.0.0.1 anzugeben, sondern 
seine tatsächliche Adresse im Schulnetz. Erst danach war er für alle Teilnehmer erreichbar. 

Zu den Skripten:
In der ersten Zeile befindet sich ein UNIX-typischer Kommentareintrag, der die Ausführung mit Python sicherstellt.
Wenn man unter IDLE Sonderzeichen einfügt, möchte der Interpreter vor Ausführung eine code-Zeile einfügen, damit
die Sonderzeichen richtig dargestellt werden: einfach machen lassen! Andernfalls werden diese nicht korrekt dargestellt.
Die Funktion ist aber zu keinem Zeitpunkt eingeschränkt.

Wünsche Dir viel Freude damit,
Stefan

