Aber dann habe ich ja nur einen ServerSocket, der auf Port 666 IRGENDWO rumschwirrt.
Wieso irgendwo? Dein Server läuft auf einem Rechner der im Internet über den Hostnamen "meinserver.bplaced.net" erreichbar ist, oder? Der Client wird seinen DNS fragen, welche IP der Server hat und -- sofern der Server tatsächlich im Internet unter dem Namen existiert -- die IP zurückgeliefert bekommen und sich dann zu dieser verbinden.
Ein richtig gutes Beispiel habe ich nicht, daher erfinde ich ein schlechtes. Wir kommunizieren mit Brieftauben zwischen Häusern. Stell Dir eine Stadt mit vielen Häusern vor. Jedes Haus hat eine Adresse. Jede Person ist ein Programm oder Teil eines Programmes. Eine Brieftaube ist ein fliegender Vogel.
Eines der Häuser ist Dein Server, ein anderes Haus ist der Client. Wenn jemand aus dem Client-Haus eine Frage an jemandem aus dem Server-Haus stellen möchte, schickt er eine Brieftaube hin. Dazu muss er das Server-Haus kennen, also entweder dessen Nummer oder die Adresse.
Eine Brieftaube kann aber schlecht zu einem Haus fliegen, die Klingelschilder lesen und selber herausfinden, welche Person die Nachricht bekommen soll. Eine Brieftaube kann immer nur zu einem bestimmten Fenster eines bestimmten Hauses fliegen. Deswegen hat jedes Haus durchnumerierte Fenster.
Wenn ein Sender eine Taube verschickt, legt er zuerst eine Schachtel an und beschriftet diese mit Adresse und Fensternummer des Empfängers. Die selben Daten teilt er der Taube mit, damit diese weiß, wohin sie fliegen muss. Außerdem stattet er die Taube mit einer Nachricht und seinem eigenen Absender aus, ebenfalls bestehend aus Adresse und Fensternummer. Und dann schickt er die Taube auf die Reise, lässt sein Fenster offen und die Schachtel bestehen.
Allerdings sind Fenster eines Hauses natürlich normaler Weise verschlossen. Es bringt also nichts, eine Taube zu einem verschlossenen Fenster im Server-Haus fliegen zu lassen. Sie wird zurückkehren und ganz aufgeregt gurren. Ein Empfänger im Server-Haus der also Nachrichten erwartet, muss dafür sorgen, dass ein Fenster offen ist und beobachtet wird. Ein geschlossenes Fenster gehört niemandem, jedes offene genau einem Empfänger im Haus. Wenn jemand also Nachrichten erwartet, schickt er einen Taubenpostsortierer, der das ihm genannte Fenster öffnet und wartet. Es kann pro geöffnetem Fenster nie mehr als einen Taubenpostsortierer geben.
Der Empfänger teilt dem Taubenpostsortierer, dass dieser auf das Erscheinen von Tauben warten soll. Wenn eine Taube an seinem Fenster erscheint, nimmt er eine neue Postschachtel, liest Adresse und Fensternummer des Senders aus der Nachricht der Taube und beschriftet damit die Schachtel. Die Taube setzt er in die Schachtel und übergibt diese dem Empfänger. Typisch Personal: Nachdem er das getan hat, muss man ihm sagen, dass er wieder auf das Erscheinen neuer Tauben warten soll.
Ein Empfänger kann mehrere Postschachteln erhalten, je eine pro Sender. Jede Taube des selben Senders fliegt von da an selbständig zu Ihrer Schachtel. Der Empfänger entnimmt der Postschachtel Tauben und liest deren Nachrichten. Wenn er eine Nachricht zurücksenden möchte klammert er seine neue Nachricht an eine neue Taube und setzt diese in die Postschachtel. Zum Glück können die Tauben lesen, erkennen anhand der Schachtel, wohin sie fliegen müssen, bewegen sich zum Client-Haus und setzen sich dort in Ihre Schachtel und warten.
Sowohl der Empfänger als auch der Sender können die Kommunkation beenden, indem sie dies dem jeweils anderen mitteilen. Beide entfernen die Beschriftung auf der Postschachtel und stellen diese zurück ins Lager. Der Empfänger im Server-Haus kann natürlich auch jeder Zeit das Fenster wieder schließen. Dabei werden alle Postschachteln hinter diesem Fenster wieder freigegeben und der Taubenpostsortierer entlassen.
Zurückübertragen:
- Ein Haus ist ein Computer
- Die Adresse eines Hauses ist eine IP eines Computers, ggf. auch der Name der per DNS dann zur IP gewandelt wird
- Ein Fenster ist ein Port
- Eine Taube ist eine beliebige Netzwerkkommunikation (in welcher Form auch immer)
- Ein Taubenpostsortierer ist ein [c]ServerSocket[/c]
- Eine Postschachtel ist ein [c]Socket[/c]
- Das Warten des Taubenpostsortierers passiert bei [c]accept()[/c]
- Die Postschachtel wird angelegt, bevor der Aufruf zu [c]accept()[/c] aufhört
Ich lasse mich gern korrigieren, falls ich irgendwas suboptimal oder falsch erklärt habe.
Ebenius