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.