Teil 2 Zentralabitur
Transcription
Teil 2 Zentralabitur
Client-Server – Teil 2 - 1/38 Kommunikation in Netzwerken Teil 2 Barbara Leipholz-Schumacher Euregio-Kolleg, Würselen 3.6.2006 Client-Server – Teil 2 - 2/38 3.6.2006 Konfiguration des SMTP-Servers postfix (Linux) main.cf Die Datei main.cf (meist unter /etc/postfix zu finden) ist die Hauptkonfigurations-Datei von Postfix. • • • • • myhostname legt fest welchen Namen der Mailserver haben soll, z.B.: myhostname=ada mydomain legt den Domain-Namen fest, z.b. mydomain=euregio-kolleg.ac.nw.schule.de mydestination legt fest für welche Domains die Emails angenommen werden, z.B. mydestination= $myhostname, $mydomain, localhost.$mydomain mynetworks legt fest welche Netzwerke Postfix als vertrauenswürdig einstufen soll. Z.B.: mynetworks = 127.0.0.0/8, 192.168.100.0/24 relayhost legt fest wohin Postfix die Emails die er selber nicht ausliefern kann senden soll (also alles außerhalb der Domain). Z.B. zum Mailserver unseres Providers: relayhost = smtp.puretec.de Quelle: http://www.tuxhausen.de/software_postfix.html Client-Server – Teil 2 - 3/38 MailServer mit SMTP AUTH RFC 2554 Eintrag in /etc/postfix/main.cf #SMTP Auth #SMTP mit SASL-Authentification verwenden smtp_sasl_auth_enable = yes #Die Paßwörter stehen in der Datei /etc/postfix/sasl_passwd smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd #Zusatz-Optionen: Keine anonyme-Anmeldung verwenden smtp_sasl_security_options = noanonymous #Relayhost (der Server der unsere Emails annehmen soll) relayhost = auth.smtp.kundenserver.de Passwortdatei /etc/postfix/sasl_passwd #domain benutzername:passwort auth.smtp.kundenserver.de mail:geheim Quelle: http://www.tuxhausen.de/postfix_smtp_auth-3.html 3.6.2006 Client-Server – Teil 2 - 4/38 3.6.2006 Nach der Änderung: • Konfigurationsdatei ins richtige Format umwandeln: postmap main.cf • Passwortdatei ins richtige Format umwandeln: postmap sasl_passwd • Konfigurationsdatei neu einlesen: postfix reload Postfix automatisch starten: YAST2 -> System -> Runlevel-Editor -> postfix aktivieren POP3-Servers qpopper (Linux) QPopper automatisch starten: YAST2 -> Netzwerkdienste -> Netzwerkdienste (xinetd) -> popper aktivieren Client-Server – Teil 2 - 5/38 Unterrichtsreihe: Schichtenmodell und Protokolle Zeit 1. D Thema • • • 2. D Einstieg Kommunikation, moderne Kommunikationsmethoden Kommunikation per E-Mail IP-Adressen, Subnet-Maske, DNS (Nutzung von ping, traceroute (pathping), ifpconfig) Protokolle • TCP • IP • Anwendungsschicht, Port Visualisierung: ethereal, ntop POP3 • Email von einem Mail-Server mit POP3 abholen. Beobachtung des Protokolls (Outlook-Express, fetchmail) • Befehle, ihre Bedeutung, gegebenenfalls Parameter aufschreiben • Versuch der Beschreibung des Protokolls 3. D Beschreibung des Protokolls • Zeit-Sequenzdiagramm • Tabelle • Zustandsübergangsgraph (Poseidon) • SDL SMTP • E-Mail über einen SMTP-Server versenden • Beschreibung des Protokolls 3.6.2006 Client-Server – Teil 2 - 6/38 Zeit 4. D Thema SMTP • Fortsetzung der Beschreibung des Protokolls • Kurzvortrag einer/der Arbeitsgruppen FTP • Dateien per ftp übertragen (Arbeitsblatt, Beobachtung) • Beschreibung des Protokolls • Kurzvortrag einer/der Arbeitsgruppen 3.6.2006 Client-Server – Teil 2 - 7/38 Unterrichtsreihe: Entwicklung von Client-Server-Applikationen Zeit 1. D Thema • • • 2. D • • Vorstellung der Klasse Verbindung Zeit-Client • Erprobung mittels telnet • Protokoll • Vorstellung des Quellcode der Klasse Zeit-Client (Konsole/GUI) • Test Echo-Client • Erprobung mittels telnet • Protokoll • Entwicklung des Quellcode durch die Schüler/innen (Konsole/GUI) • Test POP3-Client • Entwicklung des Quellcode in Arbeitsgruppen (Konsole/GUI) • Test Hausaufgabe: SMTP-Client 3.6.2006 Client-Server – Teil 2 - 8/38 Zeit 3. D Thema • • • 4. D • • • Vorstellung der abstrakten Klasse Server und der Klasse Mitarbeiter Echo-Server • Vorstellung des Quellcode der Klasse Echo-Server • Test Wahl-Server • Entwicklung und Beschreibung des Protokolls in Arbeitsgruppen • Entwicklung des Quellcode der Klassen Wahl-Server und WahlClient in Arbeitsgruppen (Konsole/GUI) • Test Datei-Server und -Client • Entwicklung und Beschreibung des Protokolls in Arbeitsgruppen • Entwicklung des Quellcode der Klassen Datei-Server und DateiClient in Arbeitsgruppen (Konsole/GUI) • Test Chat-Server und -Client • Entwicklung und Beschreibung des Protokolls in Arbeitsgruppen • Entwicklung des Quellcode der Klassen Chat-Server und ChatClient in Arbeitsgruppen (GUI) • Test Fortsetzung der Arbeit als Hausaufgabe 3.6.2006 Client-Server – Teil 2 - 9/38 Zeit Zusatz 5. + 6. D Thema • Projekt • Auktionssystem • online-Shop • Spiel • Schiffeversenken • .... 3.6.2006 Client-Server – Teil 2 - 10/38 Client-Applikationen 3.6.2006 Client-Server – Teil 2 - 11/38 Time-Client Server antwortet Client fragt Verbindungs wunsch Fri Jun 2 18:42:38 2006 3.6.2006 Client-Server – Teil 2 - 12/38 3.6.2006 Protokoll Zeit Zustand Client neue Verbindung telnet time.fu-berlin.de 13 Trying 130.133.1.10... Connected to time.fu-berlin.de. Escape character is '^]'. Fri Jun 2 18:42:38 2006 Connection closed by foreign host. Server Datum und Zeit Endzustand Verbindung beendet Client-Server – Teil 2 - 13/38 Vorgegebene Klasse Connection Klassenname: Connection Beschreibung: Die Klasse Connection kapselt ein Socket-Objekt und stellt Methoden zur Kommunikation zwischen zwei Rechnern zur Verfügung. Konstruktor: Connection(pServerIP: Zeichenkette, pServerPort: ganze Zahl) nachher: Es ist eine Verbindung zum durch IP-Adresse und Portnummer angegebenen Server eingerichtet, so dass Daten gesendet und empfangen werden können Methode: receive(): Zeichenkette vorher: Verbindung ist aufgebaut. nachher: Es wurde auf eine eingehende Nachricht vom Server gewartet und diese Nachricht zurückgegeben, wobei der vom Server angehängte Zeilentrenner entfernt wurde. Während des Wartens war der ausführende Prozess blockiert. Methode: send(nachricht: Zeichenkette) vorher: Verbindung ist aufgebaut. nachher: Die angegebene Nachricht wurde, um einen Zeilentrenner erweitert, an den Server versandt. Methode: close() vorher: Verbindung ist aufgebaut. nachher: Die Verbindung wurde getrennt und kann nicht mehr verwendet werden. 3.6.2006 Client-Server – Teil 2 - 14/38 Quelle: • • 3.6.2006 http://www.learn-line.nrw.de/angebote/abitur-gost/download/if-datentypen-objekto-ansatz-delphi.pdf http://www.learn-line.nrw.de/angebote/abitur-gost/download/if-datentypen-objekto-ansatz-java.pdf Java-Klasse: http://www.ac.shuttle.de/ac/euregio-kolleg/lfb/clientServer/java/Verbindung.java SuM-Delphi-Klassen: http://www.learn-line.nrw.de/angebote/oop/medio/download/delphi/index.html Ergänzende Information: http://www.learn-line.nrw.de/angebote/oop/medio/kurs/einfuehrung/client/client2.html Client-Server – Teil 2 - 15/38 1. import java.net.*; 2. 3. public class ZeitClient 4. { 5. private Connection verbindung; 6. private String nachricht; 7. 8. public ZeitClient(String serverName,int port) 9. { 10. verbindung = new Connection(serverName,port); 11. } 12. 13. public void protokoll() 14. { 15. nachricht = verbindung.receive(); 16. verbindung.close(); 17. } 18. 19. public String gibLetzteNachricht() 20. { 21. return nachricht; 22. } 23.} 3.6.2006 Client-Server – Teil 2 - 16/38 Echo-Client Server antwortet Client fragt Hallo Hallo 3.6.2006 Client-Server – Teil 2 - 17/38 Protokoll Echo Zustand Client Server neue Verbindung Echo Echo <Text> Echo BYE <Text> telnet faun.nada.kth.se 7 Trying 130.237.222.80... Connected to faun.nada.kth.se. Escape character is '^]'. Hallo Hallo Wie gehts? Wie gehts? ..... Endzustand Echo Verbindung beendet 3.6.2006 Client-Server – Teil 2 - 18/38 3.6.2006 Ergänzende Information: http://www.learn-line.nrw.de/angebote/oop/medio/kurs/einfuehrung/client/client3.htm Client-Server – Teil 2 - 19/38 Klasse EinAusgabe Klassenname: EinAusgabe Beschreibung: Textausgabe auf die Konsole und Text von der Konsole einlesen. Konstruktor: EinAusgabe() nachher: Es existiert ein Objekt um auf die Konsole zu schreiben und von der Konsole zu lesen Methode: schreiben(text: Zeichenkette) nachher: Gibt den Text auf der Konsole aus. Methode: lesen(): Zeichenkette nachher: Liest den Text von der Konsole. Methode: liesGanzeZahl(): ganze Zahl nachher: Liest eine ganze Zahl von der Konsole. Methode: liesFliesskommaZahl(): Fließkommazahl nachher: Liest eine Fließkommazahl von der Konsole ein. 3.6.2006 Client-Server – Teil 2 - 20/38 3.6.2006 POP3-Client Zustand Verbindung Client Server +OK POP server ready Endzustand warte auf USER warte auf USER USER name Falls die Syntax korrekt ist: +OK password required for user name Sonst: –ERR unknown command Falls das Passwort korrekt ist: +OK name's mailbox has n messages (x octets) Sonst: –ERR authentication failed warte auf PASS warte auf PASS PASS passwort warte auf USER Transkationsphase Verbindung beendet Client-Server – Teil 2 - 21/38 POP3-Protokoll Client Transaktionsphase STAT LIST LIST n RETR n DELE n Server Anzahl der gespeicherten Mails (n) und die Größe der Mailbox (m): +OK n m Nummer und Größe aller Mails +OK 1 g1 2 g2 ... Falls Nachricht n existiert: +OK n gn Sonst: –ERR no such message Falls Nachricht n existiert: +OK gn octets sendet Nachricht n Sonst: –ERR no such message Falls Nachricht n existiert: +OK message deleted Sonst: –ERR no such message 3.6.2006 Client-Server – Teil 2 - 22/38 POP3-Protokoll Client QUIT Server +OK POP3 server signing off Der Server beendet anschließend die Verbindung. 3.6.2006 Client-Server – Teil 2 - 23/38 3.6.2006 Client-Server – Teil 2 - 24/38 Client-Server-Applikationen 3.6.2006 Client-Server – Teil 2 - 25/38 Hallo Hallo Wie gehts Wie gehts bye 3.6.2006 Client-Server – Teil 2 - 26/38 3.6.2006 Echo-Server Der Echo-Server startet Mitarbeiter Echo-Client Mitarbeiter Echo-Client Mitarbeiter Echo-Client für jeden Client einen Mitarbeiter Client-Server – Teil 2 - 27/38 3.6.2006 Vorgegebene Klasse Server • • http://www.learn-line.nrw.de/angebote/abitur-gost/download/if-datentypen-objekto-ansatz-delphi.pdf http://www.learn-line.nrw.de/angebote/abitur-gost/download/if-datentypen-objekto-ansatz-java.pdf Klassenname: Server Beschreibung: Über die Klasse Server ist es möglich, eigene Serverdienste anzubieten, so dass Clients Verbindungen gemäß dem TCP-Protokoll hierzu aufbauen können. Nachrichten werden grundsätzlich zeilenweise verarbeitet. Verbindungsaufbau, Nachrichtenempfang und Verbindungsende geschehen nebenläufig. Durch Überschreiben der entsprechenden Methoden kann der Server auf diese Ereignisse reagieren. Eine Fehlerbehandlung ist in dieser Klasse aus Gründen der Vereinfachung nicht vorgesehen. Konstruktor: Server(pPortNr: ganze Zahl) nachher: Der Server bietet seinen Dienst über die angegebene Portnummer an. Clients können sich nun mit dem Server verbinden. Methode: closeConnection(pClientIP: Zeichenkette, pClientPort: ganze Zahl) vorher: Eine Verbindung mit dem angegebenen Client besteht nachher: DieVerbindung besteht nicht mehr. Der Server hat sich selbst die Nachricht processClosedConnection gesendet. Methode: processClosedConnection(pClientIP: Zeichenkette, pClientPort: ganze Zahl) vorher: Die Verbindung zu dem angegebenen Client wurde beendet. Client-Server – Teil 2 - 28/38 3.6.2006 nachher: Der Server hat auf das Beenden der Verbindung reagiert. Diese Methode enthält keine Anweisungen und kann in Unterklassen überschrieben werden. Methode: processMessage(pClientIP: Zeichenkette, pClientPort: ganze Zahl, pMessage: Zeichenkette vorher Der Client mit der angegebenen IP-Adresse und Portnummer hat dem Server eine Nachricht gesendet. nachher Der Server hat auf die Nachricht reagiert. Diese Methode enthält keine Anweisungen und kann in Unterklassen überschrieben werden. Methode: processNewConnection(pClientIP: Zeichenkette, pClientPort: ganze Zahl) vorher Der Client mit der angegebenen IP-Adresse und Portnummer hat eine Verbindung zum Server aufgebaut. nachher Der Server hat auf den Verbindungsaufbau reagiert. Diese Methode enthält keine Anweisungen und kann in Unterklassen überschrieben werden. Methode: send(pClientIP: Zeichenkette, pClientPort: ganze Zahl, pMessage: Zeichenkette vorher Eine Verbindung zu dem Client mit der angegebenen IP-Adresse und Portnummer besteht. nachher Die angegebene Nachricht wurde dem Client, um einen Zeilentrenner erweitert, gesendet. Client-Server – Teil 2 - 29/38 3.6.2006 Methode: sendToAll(pMessage: Zeichenkette) nachher Die angegebene Nachricht wurde an alle verbunden Clients gesendet. Methode: close() nachher Alle Verbindungen wurden getrennt. Der Server nimmt keine Verbindungswünsche mehr an. Ergänzende Information http://www.learn-line.nrw.de/angebote/oop/medio/kurs/einfuehrung/clientserver/index.html Client-Server – Teil 2 - 30/38 1. public class EchoServer extends Server 2. { 3. public EchoServer(int port) 4. { 5. super(port); 6. } 7. 8. public void processNewConnection(String pClientIP, int pClientPort) 9. { 10. send(pClientIP, pClientPort, "Hallo hier ist der Echo-Server"); 11. } 12. 13. public void processMessage(String pClientIP, int pClientPort, String pMessage) 14. { 15. if ( ! pMessage.equals("bye") ) 16. send(pClientIP, pClientPort, pMessage); 17. else 18. closeConnection(pClientIP, pClientPort); 19. } 20. 21. 22. public static void main(String[] args) 23. { 24. int port = 1100; 25. new EchoServer(port); 26. } 3.6.2006 Client-Server – Teil 2 - 31/38 1. Start des Servers 2. Start der Clients Fehleranalyse mit telnet Im DOS-Fenster: telnet server port z.B. telnet 192.168.100.3 1100 3.6.2006 Client-Server – Teil 2 - 32/38 Wahl SPD CDU Die Linke 3.6.2006 Client-Server – Teil 2 - 33/38 Datei-Server Server antwortet /pub Client fragt datei.txt sendet den Inhalt der Datei 3.6.2006 Client-Server – Teil 2 - 34/38 Client Begrüssung > dateiname zeile 1 zeile 2 zeile n > ... bye Server 3.6.2006 Client-Server – Teil 2 - 35/38 3.6.2006 Chat Zustand Client neue Verbindung Server an Client: Endzustand warte auf Benutzernamen „Willkommen beim Chat-Server“ warte auf benutzername USER benutzername falls noch niemand unter dem Namen angemeldet ist NeuerUser +OK Willkommen im Chat falls bereits angemeldet -ERR bereits angemeldet warte auf Benutzernamen falsche Syntax -ERR Syntaxfehler NeuerUser an alle: <benutzername> hat Chat betreten warte auf Benutzernamen Chat Client-Server – Teil 2 - 36/38 3.6.2006 Chat Chat MSG <Text> an alle: Chat <Text> Chat PRIVMSG <benutzername>:<Text> an <benutzername>: Chat <Text> Chat WHO an Client: Chat alle angemeldeten Benutzer Chat QUIT an alle: <benutzername> hat Chat verlassen Chat Client-Server – Teil 2 - 37/38 3.6.2006 Vorgegebene Klasse Client • • http://www.learn-line.nrw.de/angebote/abitur-gost/download/if-datentypen-objekto-ansatz-delphi.pdf http://www.learn-line.nrw.de/angebote/abitur-gost/download/if-datentypen-objekto-ansatz-java.pdf Klassenname: Client Beschreibung: Über die Klasse Client werden Netzwerkverbindungen mit dem TCP-Protokoll ermöglicht. Es können nach dem Verbindungsaufbau zu einem Server Zeichenketten gesendet und empfangen werden, wobei der Empfang nebenläufig geschieht. Zur Vereinfachung geschieht dies zeilenweise, d.h. beim Senden einer Zeichenkette wird ein Zeilentrenner ergänzt und beim Empfangen wird er entfernt. Die empfangene Nachricht wurd durch eine Ereignisbehandlungsmethode verarbeitet, die in Unterklassen überschrieben werden muss. Eine Fehlerbehandlung ist in dieser Klasse aus Gründen der Vereinfachung nicht vorgesehen. Konstruktor: Client(pServerIP: Zeichenkette, pServerPort: ganze Zahl) nachher: Es ist eine Verbindung zum durch IP-Adresse und Portnummer angegebenen Server eingerichtet, so dass Zeichenketten gesendet und empfangen werden können. Anstelle der IP-Adresse pServerIP kann auch der Rechnername angegeben werden. Methode: processMessage(pMessage: Zeichenkette) vorher Der Server hat die angegebene Nachricht gesendet. Der Zeilentrenner wurde entfernt. Client-Server – Teil 2 - 38/38 3.6.2006 nachher Der Client hat auf die Nachricht reagiert. Diese Methode enthält keine Anweisungen und muss in Unterklassen überschrieben werden, damit die Nachricht verarbeitet werden kann. Methode: send(pMessage: Zeichenkette) nachher Die angegebene Nachricht wurde, um einen Zeilentrenner erweitert, an den Server versandt. Methode: close() nachher Die Verbindung wurde getrennt und kann nicht mehr verwendet werden.