Nahtlose Socket-Programmierung in Java

Zuerst wird eine kleine Client/Server-Applikation für einen Server erstellt, der kontinuierlich auf eingehende Verbindungen hört. Außerdem wird eine Client-Applikation geschrieben, welche die Verbindung mit einem Server-Prozess herstellt und Daten überträgt. Beide Programme laufen unabhängig voneinander und können sich auf verschiedenen Hosts befinden.

Das Server-Programm beginnt damit, ein neues Serversocket-Objekt zu erzeugen, das auf einem bestimmten Port hört. (Wenn man eine Server-Applikation schreibt, wählt man einen Port, der nicht bereits für einen anderen Dienst vorgesehen ist.) Im folgenden Beispiel hört der Server auf Port 4444:

Listing A

Serversocket ist eine Java.net-Klasse, die eine systemunabhängige Implementierung der Serverseite einer Client/Server-Socket-Verbindung bereitstellt. Der Konstruktor für Serversocket löst eine Ausnahme aus, wenn er nicht auf dem angegebenen Port hören kann (zum Beispiel, weil der Port bereits verwendet wird). Wenn der Server erfolgreich eine Verbindung mit dem Port herstellt, wird das Serversocket-Objekt erzeugt, und der Server macht mit dem nächsten Schritt weiter – er nimmt eine Verbindung von einem Client an.

Listing B

Die Accept-Methode wartet, bis ein Client eine Verbindung auf dem Host und Port des Servers startet und anfragt. Wenn eine Verbindung erfolgreich angefragt und hergestellt ist, gibt die Accept-Methode ein neues Socket-Objekt zurück, das an denselben lokalen Port gebunden ist und bei dem als entfernte Adresse und entfernter Port diejenigen des Clients konfiguriert sind. Der Server kann mit dem Client über den neuen Socket kommunizieren und weiterhin auf dem originalen Serversocket auf Verbindungsanfragen vom Client hören. (Diese spezielle Version des Programms hört nicht auf weitere Verbindungsanfragen.)

Es können mehrere Client-Anfragen auf demselben Port eintreffen und entsprechend auf demselben Serversocket. Verbindungsanfragen von Clients werden am Port in die Warteschlange gestellt. Daher muss der Server Verbindungen nacheinander annehmen, kann sie jedoch gleichzeitig durch die Verwendung von Threads (das heißt ein Thread pro Client-Verbindung) bedienen. Diese Logik kommt in allen Java-Server-Applikationen für mehrere Verbindungen zum Einsatz. Zum Vergleich das folgende Beispiel:

Listing C

Der neue Thread liest aus der und schreibt in die Client-Verbindung nach Bedarf. Nachdem der Server erfolgreich eine Verbindung mit einem Client hergestellt hat, kommuniziert er mit dem Client, indem er folgenden Code verwendet:

Listing D

In diesem Fall wird der Server alle eingehenden Informationen in Antworten duplizieren, bis er den „Bye.“-String erhält. So lange sich der Server und der Client noch etwas zu sagen haben, liest und schreibt der Server vom oder in den Socket, der Nachrichten zwischen dem Client und dem Server hin- und herschickt. Danach beendet der Server die Verbindung und alle Ströme.

Listing E

Page: 1 2 3

ZDNet.de Redaktion

Recent Posts

Studie: 91 Prozent der Ransomware-Opfer zahlen Lösegeld

Die durchschnittliche Lösegeldzahlung liegt bei 2,5 Millionen Dollar. Acht Prozent der Befragten zählten 2023 mehr…

3 Tagen ago

DMA: EU stuft auch Apples iPadOS als Gatekeeper ein

Eine neue Analyse der EU-Kommission sieht vor allem eine hohe Verbreitung von iPadOS bei Business-Nutzern.…

3 Tagen ago

Chips bescheren Samsung deutlichen Gewinnzuwachs

Das operative Ergebnis wächst um fast 6 Billionen Won auf 6,64 Billionen Won. Die Gewinne…

3 Tagen ago

Chrome: Google verschiebt das Aus für Drittanbietercookies

Ab Werk blockiert Chrome Cookies von Dritten nun frühestens ab Anfang 2025. Unter anderem gibt…

4 Tagen ago

BAUMLINK: Wir sind Partner und Aussteller bei der Frankfurt Tech Show 2024

Die Vorfreude steigt, denn BAUMLINK wird als Partner und Aussteller bei der Tech Show 2024…

4 Tagen ago

Business GPT: Generative KI für den Unternehmenseinsatz

Nutzung einer unternehmenseigenen GPT-Umgebung für sicheren und datenschutzkonformen Zugriff.

4 Tagen ago