Nutzung einfacher Server-Dienste mittels Clients
Nutzung von Server-Diensten mithilfe der Klasse Connection
Dokumentation der Klasse Connection
Objekte der Klasse Connection ermöglichen eine Netzwerkverbindung zu einem Server mittels TCP/IP-Protokoll. Nach Verbindungsaufbau können Zeichenketten (Strings) zum Server gesendet und von diesem empfangen werden. Zur Vereinfachung geschieht dies zeilenweise, d. h., beim Senden einer Zeichenkette wird ein Zeilentrenner ergänzt und beim Empfang wird dieser entfernt. Es findet nur eine rudimentäre Fehlerbehandlung statt, so dass z.B. der Zugriff auf unterbrochene oder bereits getrennte Verbindungen nicht zu einem Programmabbruch führt. Eine einmal getrennte Verbindung kann nicht reaktiviert werden.
- Connection(String pServerIP, int pServerPort) Ein Objekt der Klasse Connection wird erstellt. Dadurch wird eine Verbindung zum durch pServerIP und pServerPort spezifizierten Server aufgebaut, so dass Daten (Zeichenketten) gesendet und empfangen werden können. Kann die Verbindung nicht hergestellt werden, kann die Instanz von Connection nicht mehr verwendet werden.
- void send(String pMessage) Die Nachricht pMessage wird – um einen Zeilentrenner ergänzt – an den Server gesendet. Schlägt der Versand fehl, geschieht nichts.
- String receive() Es wird beliebig lange auf eine eingehende Nachricht vom Server gewartet und diese Nachricht anschließend zurückgegeben. Der vom Server angehängte Zeilentrenner wird zuvor entfernt. Während des Wartens ist der ausführende Prozess blockiert. Wurde die Verbindung unterbrochen oder durch den Server unvermittelt geschlossen, wird null zurückgegeben.
- void close() Die Verbindung zum Server wird getrennt und kann nicht mehr verwendet werden. War die Verbindung bereits getrennt, geschieht nichts.
Ein Objekt der folgenden Java-Klasse TCPIPConnection stellt unter Nutzung der Klasse Connection eine Verbindung zu einem Server her. Die IP-Adresse oder die URL des Servers und der Port, auf dem die Verbindung erfolgen soll, werden als Parameter an den Konstruktor übergeben.
import javax.swing.JOptionPane;
public class TCPIPConnection extends Connection {
public TCPIPConnection(String pServerIP, int pServerPort) {
super(pServerIP, pServerPort);
}
public void servernachrichtAusgeben() {
JOptionPane.showMessageDialog(null,"Server sendet:\n" +receive());
}
}
Die Methode showMessageDialog der Java-Klasse JOptionPane zeigt ein Fenster mit der als Parameter übergebenen Textnachricht an.
Verschiedene öffentliche Server stellen Dienste zur Verfügung, die mithilfe einer Client-Software genutzt werden können.
Der Daytime-Dienst
Der Daytime-Dienst sendet auf Anfrage das aktuelle Datum mit der aktuellen Uhrzeit. Amerikanische Daytime-Server senden, im Gegensatz zu ihren europäischen Pendants, vor der Übertragung von Uhrzeit und Datum noch eine einzelne Leerzeile. Da die Nachrichtenübertragung in den Netzwerkklassen von QUA-LiS NRW zeilenweise stattfinden, müssen damit konstruierte Daytime-Clients also in der Lage sein, ggf. zwei Nachrichten zu empfangen.
Der Daytime-Dienst läuft nach folgendem Protokoll ab.
Client an Server | Server an Client |
---|---|
Verbindungsaufnahme | Optional: Leerzeile Datum und Uhrzeit. Server trennt die Verbindung. |
Die Methode showMessageDialog der Java-Klasse JOptionPane zeigt ein Fenster mit der als Parameter übergebenen Textnachricht an. Verschiedene öffentliche Server stellen Dienste zur Verfügung, die mithilfe einer Client-Software genutzt werden können. Der Daytime-Dienst läuft gemäß RFC 867 im Allgemeinen auf Port 13.
Man stellt eine Verbindung zu dem im RFC-867 angegebenen Daytime-Server „time- b.timefreq.bldrdoc.gov“ mit BlueJ her, indem man ein Objekt der Klasse TCPIPConnection erzeugt, wie in Abbildung 1 zu sehen.
Nach Aufruf der Methode receive der Klasse Connection (s. Abbildung 2) wird zunächst eine Leerzeile zurückgegeben (s. Abbildung 3).
Nach erneutem Aufruf dieser Methode werden das aktuelles Datum und Zeit in dem in RFC-867 angezeigten Format angezeigt (s. Abbildung 4). Verbindet man sich mit dem Daytime-Server der Freien Universität Berlin „time.fu-berlin.de“, erhält man direkt ohne Leerzeile das Tagesdatum mit der aktuellen mitteleuropäischen Zeit in lesbarer Form (s. Abbildung 5).
Aufgaben
Teste die Klasse Connection mit unterschiedlichen DayTimeServern in BlueJ aus.