![]() |
![]() |
||
| Netze |
[Material]
[historische Beispiele]
[Einstieg]
[Grundbegriffe]
[Netzhardware]
[Universal-Empfänger]
[mini-Sender]
[mini-Empfänger]
[miniEthernet]
[Transceiver]
[Fehlererkennung]
[Fehlerbehandlung]
[Bus]
[Rahmen]
[Medium Access Control]
[Routing]
[Schichtenmodell]
[Dienste im Internet]
[Real-Experimente]
[Sicherheit]
[Codes]
[Programme]
[Hardware]
[Protokolle]
[Glossar]
[Bautipps]
[Unterricht]
|
||
|
Hohenstaufen-Gymnasium Kaiserslautern |
|
In den RFCs ist ein Socket als ein Tupel aus Ziel- und Quell-IP-Adresse,
Ziel- und Quell-Port und Netzwerkprotokoll beschrieben.
(aus 'Socket' bei wikipedia - inzwischen geändert!)
Der Ziel-Port wählt einen bestimmten Dienst aus, der Quell-Port wird zufällig generiert. Auf diese Weise sind mehrere
Verbindungen zu einem Dienst zwischen zwei Rechnern
(hosts) möglich.
Wir benutzen ein Socket (engl. Steckdose, Buchse) als eine Software-Schnittstelle zum Zweck der
Nutzung einer bidirektionalen Verbindung zwischen Computern. Diese Schnittstelle wird in
objektorientierten Sprachen als ein spezielles Objekt auftreten, das die Handhabung erleichtert.

Man kann das Socket-Konzept mit einer Telefonverbindung vergleichen. Das Telefongerät entspricht dem Socket. Die IP-Adressen wären die Telefonnummern, die Ports wären die Nummern der Durchwahlverbindungen. Um einen Telefon-Dienst in Anspruch nehmen zu können, muss man also die Nummer samt Durchwahl des Dienstes kennen. Gewöhnlich meldet sich 'der Dienst' nach einer Anwahl und nach Austausch von 'Anmeldeinformationen' steht die Verbindung solange bis einer der beiden Teilnehmer auflegt. Nach dem Zustandekommen ist eine Verbindung symmetrisch und fullduplex, dh. beide Teilnehmer können gleichzeitig 'senden'. Was wird passieren, wenn man, nachdem der Angerufene abgehoben hat, eine Zeitlang nichts sagt? Die eigene Nummer muss man übrigens beim Anrufen nicht kennen. Hat man mehrere Telefone, so kann man in der Regel auch mehrere Verbindungen gleichzeitig zu einem Dienst z.B. einem Call-Center aufbauen.
Die Menge aller öffentlichen Signaturen einer Klasse gehört zur Schnittstelle der Klasse. Auch selbstdefinierte Datentypen und Konstanten, die die Klasse benutzt, gehören zur Schnittstelle. Zusätzlich enthält eine Schnittstelle semantische Festlegungen. Diese werden oft informell in Kommentaren oder durch selbsterklärende Methodennamen geliefert.
Grob gesagt: Eine Schnittstelle einer Klasse enthält alles, was ein Nutzer über die Klasse wissen muss.
erstellt mit violet
Ein Objekt vom Typ TNetzVerbinder kann als Server oder als Client fungieren. Die Methode starteServerdienst(port : string) macht das Objekt zum Server, die Methode verbindeZu(host, port : string) zum Client. Eine eingegangene Nachricht kann mitGetNachricht : string ausgelesen werden. Das Ereignis OnNeueNachricht wird nach dem Eintreffen einer neuen Nachricht ausgelöst. TEreignis = procedure of object ist der Typ einer parameterlosen Prozedur. Fehlermeldungen werden mit SendMessage in einem eigenständigen Fenster ausgegeben, sodass die Klasse keinerlei Bindung zu einer GUI haben muss. Über die Ereignisse kann aber eine solche Verbindung hergestellt werden.
erstellt mit UMLEd, Download:
TNetzVerbinder.zip
NetzVerbindung_exe.zip,
NetzVerbindung.zip
Marco Schneider, Rittersberg-Gymnasium Kaiserslautern hat einen Python-Client gebaut.
Bei Thomas Karp, Friedrich-Magnus-Schwerd Gymnasium Speyer kann man in Sachen Java fündig werden.
Es soll nun schrittweise mit
Hilfe der Klasse
TNetzVerbinder ein kleines Client-Programm entwickelt werden.
Dabei kann zur Zeitersparnis das Projekt Client1 (in Client10.zip)
als Vorlage dienen.
netz.OnNeueNachricht := aktualisiere;Da OnNeueNachricht eine prozedurale Variable ist, ist das eine einfache Wertzuweisung.
Der einfache Client kann nun zur Inanspruchnahme von Serverdiensten genutzt werden. Man muss dazu die Adresse des Servers und die Portnummer des Dienstes wissen. Außerdem wird die Kommunikation mit einem Server nach einem bestimmten Protokoll, z.B. Hypertext Transfer Protocol-http abgewickelt. Die Einzelheiten eines Protokolls z.B. wie man eine html-Datei von einem Web-Server holt:
GET /abc.html HTTP/1.1
Host: www.hsg-kl.de
(Achtung: 2 CRLF am Ende!)
erfährt man aus den RFCs. Die RFCs sind in der Regel sehr umfangreich und technisch-korrekt formuliert. Über wikipedia kommt man gewöhnlich einfacher an die benötigten Informationen.
Das Client1-Programm lässt sich einfach zu einem kleinen Server-Programm umbauen. Das Server-Programm kann allerdings
nur eine Verbindung annehmen. Folgende Änderungen sind hierfür duchzuführen
netz.starteServerDienst(port);
Programmiere einen Time-Client und decodiere die empfangene Information.
Wer sich für eine erweiterte Socket-Programmierung insbesondere für Multi-Client-Server mit der Klasse TWSocket, kann sich hier umsehen.
