Ausführungen zur Programmierung verteilter Systeme an dieser Stelle der Lehrveranstaltung sind erforderlich, um die Bearbeitung der zweiten und dritten Übungsaufgabe (siehe die Abschnitte 7.2 und 7.3) zu ermöglichen. Dass dabei Sachverhalte verwendet werden, die Inhalte späterer Kapitel sind, ist unvermeidbar und wird auf das Notwendigste beschränkt.
Zunächst ist festzustellen, dass unter Programmierung im Rahmen der Lehrveranstaltung Anwendungsprogrammierung verstanden wird. Erläutert wird in diesem Abschnitt der Aufbau und die Arbeitsweise von Java-Programmen, die
Als Werkzeuge stehen den Anwendungsprogrammen die Internetprotokolle, also die Protokolle des DoD-Protokollstapels, zur Verfügung. Da kooperierende Anwendungen
ansprechen müssen, ist ein Zugriff auf die Protokolle der Transportschicht, gegebenenfalls auf die der Anwendungsschicht, erforderlich.
Bei der Kommunikation von Anwendungen im Internet ist es manchmal möglich, die Anwendungsprogrammierung in einer Metaschicht des DoD-Modells, also über den Anwendungsprotokollen, anzusiedeln und sie vorhandene Anwendungsprotokolle verwenden zu lassen. Die Programmierung wird dadurch auf das spezielle Leistungsspektrum dieser Anwendungsprotokolle beschränkt, was nicht das Anliegen dieses Teils der Lehrveranstaltung ist.
Überwiegend greifen Anwendungsprogramme direkt auf die Transportprotokolle des Internet zu. Dort dominieren die beiden Protokolle TCP und UDP, die beide im Kapitel 4 (Transportprotokolle im Internet) noch ausführlich besprochen werden. Die Programmierschnittstelle in einem Anwendungsprogramm zu diesen beiden Protokollen wird Socket (Sockel) genannt.
Diese Programmierschnittstelle beschreibt eine Situation, bei der zwei Anwendungen durch ein Datentransportsystem, das durch Protokolle der Internet- und Netzzugangsschicht realisiert wird, miteinander verbunden sind. Anschaulich ist ein Socket einer der beiden Endpunkte dieses Transportsystems. Das heißt, dass zu jeder Verbindung zweier Anwendungen durch das Internet auch zwei Sockets, also ein Socketpaar, gehören.
TCP und UDP unterscheiden sich in ihrer Funktionalität und in ihrem Umfang an Maßnahmen zur Sicherung des Datentranports voneinander. Anwendungen steht mit
Das schlägt sich in der Programmierschnittstelle nieder, und man unterscheidet zwischen
Der Abschnitt 2.2.2 behandelt die Benutzung von Stream Sockets mit der Programmiersprache Java, und im Abschnitt 2.2.3 wird das Übertragen von Nachrichten über Datagram Sockets mit Java-Programmen vorgestellt.
Als Datenstrom (Data Stream oder kurz Stream) wird ein kontinuierlicher Fluss von Daten aus einer Datenquelle zu einer Datensenke verstanden. Zur Veranschaulichung wird häufig eine Röhre (Pipeline) verwendet, die zwei Anwendungen miteinander verbindet. Bei Stream Sockets ist das eine Röhre, die über Rechnergrenzen hinausreicht und gleichzeitig in beiden Richtungen benutzt werden kann. Eine Anwendung, die TCP sendend verwenden will, muss einen Datenstrom erzeugen und ihn an seinen Stream Socket übergeben. Auf der anderen Seite muss eine empfangende Anwendung, die TCP benutzt, sich auf den Erhalt eines Datenstroms aus seinem Stream Socket einstellen.
In sich geschlossene Dateneinheiten, die von einem Sender zu einem Empfänger übertragen werden sollen, werden als Datenpakete bezeichnet. Datagramme (Datagrams) sind Datenpakete, die in einem Kopfbereich Adressinformationen enthalten, mit denen sie unabhängig voneinander zugestellt werden können. Anschaulich können Datagramme mit Briefen verglichen werden, die auf ihrem Umschlag die beiden Adressinformationen von Sender und Empfänger tragen. Bei UDP sind Sender und Empfänger von Datagrammen Anwendungen. Eine Anwendung, die UDP sendend benutzen möchte, muss die zu übermittelnden Daten zu Datagrammen zusammenfassen und an ihren Datagram Socket übergeben. Eine empfangende Anwendung, die UDP verwendet, wird aus ihrem Datagram Socket Datagramme erhalten, in denen sie die für sie bestimmten Daten findet.
Welches der beiden Transportprotokolle im Einzelfall verwendet werden soll, wird von den Anwendungsprogrammen festgelegt. Dabei muss beachtet werden, dass wegen der unterschiedlichen Funktionalität der Protokolle zwei miteinander kommunizierende Anwendungen bei jeder Kommunikationshandlung stets das gleiche Transportprotokoll benutzen müssen. Es gibt keine Stream-Datagram-Verbindungen!
In der zweiten Übungsaufgabe zu der Lehrveranstaltung (siehe Abschnitt 7.2) wird die Verwendung von Stream Sockets in Javaprogrammen thematisiert. In der dritten Übungsaufgabe (siehe Abschnitt 7.3) ist eine weitere, von der Socketprogrammierung abstrahierende Programmierschnittstelle zu den Transportprotokollen des Internet zu verwenden. Sie beschreibt ein Client/Server-Kommunikationsmodell in der Anwendungsschicht, wobei das Clientprogramm ein Programm als Unterprogramm aufruft, das auf der Seite des Servers implementiert worden ist und dort auch ausgeführt wird. Programme, die mit dieser Programmierschnittstelle arbeiten, werden vom Compiler auf eine Kommunikation über Sockets abgebildet.
Das Aufrufen ferner Programme war eines der ersten Verfahren, das eingesetzt wurde, um eine sogenannte Middleware zu implementieren. Darunter versteht man eine Software zur Kopplung von Kommunikationspartnern durch einen Datenaustausch, die eingesetzt wird um die Komplexität heterogener Rechner- und Netzwerk-Umgebungen vor den Anwendungsprogrammen zu verbergen. Das Aufrufen ferner Programme wird im Abschnitt 2.2 (Aufrufe ferner Programme) näher erläutert.