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

Vorinstallierte Schadsoftware auf IoT-Geräten

Mit dem Internet verbundene Digitale Bilderrahmen oder Mediaplayer können mit Schadsoftware infiziert werden und sind…

6 Tagen ago

iOS und iPadOS 18.2 beseitigen 21 Sicherheitslücken

Schädliche Apps können unter Umständen einen Systemabsturz auslösen. Mindestens eine Anfälligkeit erlaubt eine Remotecodeausführung.

7 Tagen ago

Top-Malware im November: Infostealer Formbook bleibt Nummer 1

Sein Anteil an allen Infektionen steigt in Deutschland auf 18,5 Prozent. Das Botnet Androxgh0st integriert…

7 Tagen ago

Google schließt schwerwiegende Sicherheitslücken in Chrome

Betroffen sind Chrome 131 und früher für Windows, macOS und Linux. Angreifer können unter Umständen…

7 Tagen ago

Data Analytics: Dienstleister wachsen zweistellig

Marktforscher Lündendonk erwartet für das Jahr 2025 ein durchschnittliches Umsatzwachstum von 14,9 Prozent.

1 Woche ago

Open-Source-Malware auf Rekordniveau

Alarmierender Anstieg von Open-Source-Malware / Seit 2019 haben Sonatype-Analysen mehr als 778.500 bösartige Pakete aufgedeckt

1 Woche ago