J2EE und JBoss Grundlagen und Profiwissen

von: Torsten Langner, Daniel Reiberg

Carl Hanser Fachbuchverlag, 2006

ISBN: 9783446408371 , 734 Seiten

Format: PDF, OL

Kopierschutz: Wasserzeichen

Windows PC,Mac OSX für alle DRM-fähigen eReader Apple iPad, Android Tablet PC's Online-Lesen für: Windows PC,Mac OSX,Linux

Preis: 35,99 EUR

  • Social Media on the Road - The Future of Car Based Computing
    Agent-Based Approaches in Economic and Social Complex Systems VI - Post-Proceedings of The AESCS International Workshop 2009
    Evaluating User Experience in Games - Concepts and Methods
    Fundamentals of Computerized Tomography - Image Reconstruction from Projections
    User-Centered Interaction Design Patterns for Interactive Digital Television Applications
    Pervasive Computing - Innovations in Intelligent Multimedia and Applications
  • Simulating Interacting Agents and Social Phenomena - The Second World Congress
    Et voilĂ  i robot - Etica ed estetica nell'era delle macchine
    Codes and turbo codes
    Grids, Clouds and Virtualization
    Online Worlds: Convergence of the Real and the Virtual
    Self-Service in the Internet Age - Expectations and Experiences
 

Mehr zum Inhalt

J2EE und JBoss Grundlagen und Profiwissen


 

6 Socketprogrammierung (S. 51-52)

Damit zwei Rechner miteinander kommunizieren können, bedarf es keiner Middleware- Technologien wie zum Beispiel RMI, CORBA oder Web Services. Auch sind keine Komponentenmodelle wie zum Beispiel EJB notwendig. Damit zwei Rechner miteinander kommunizieren können, bedarf es lediglich eines sog. Sockets.

Bei einem Socket handelt es sich um einen Verbindungspunkt in einem TCP/IP-basierten Netzwerk. Vergleicht man einen Socket mit einer Telefonnummer, dann wäre die Vorwahl die eindeutige IP-Adresse des Rechners und die Rufnummer wäre der Port des Rechners. Bei einer Socket-Kommunikation handelt es sich um das klassische Client/Server-Modell. Ein Client sendet Daten an einen Server und empfängt wiederum Daten von diesem. Ein Webserver ist beispielsweise solch ein Server. Der passende Client für den Webserver ist ein Browser. Hierbei wählt der Browser die IP-Adresse und den Port des Webservers an. Standardmäßig „lauscht" ein Webserver auf dem Port 80. Auf Grund dieses Standards entfällt die direkte Eingabe der gesamten Webadresse samt Port in einem Webbrowser. Einen Webserver entwickelt man heutzutage jedoch nicht mehr selbst. Hierzu bietet beispielsweise Apache schon einen perfekten Webserver an: Tomcat. Socket-Programmierung ist vielmehr in denjenigen Unternehmen vorzufinden, die noch mit den von vielen als „Altlasten" 1 bezeichneten Systemen (Großrechner) kämpfen müssen. Diese Maschinen haben jedoch gegenüber den „neuen" PC-basierten Systemen fantastische Performance-Vorteile.

Da die heutigen Systeme in Großunternehmen wie zum Beispiel der Lufthansa derart entwickelt werden, dass die neuen Technologien (Applicationserver mit EJBs) als Schnittstelle für Clients angeboten werden – wobei die neuen Technologien immer noch auf die alten Applikationen zurückgreifen –, wird die Socket-Programmierung auch dann benötigt, wenn ein Applicationserver eingesetzt wird. Mit JCA wird beispielsweise ein J2EE-Komponentenmodell vorgestellt, mit dessen Hilfe u. a. solche Zugänge zu Altsystemen strukturiert entwickelt werden können. Das am Ende dieses Kapitels vorgestellte Nicht-Java-System ist ein einfacher .NET-Client, der mit der Programmiersprache C# geschrieben wurde. Hierbei wurde explizit C# gewählt, da der Code zu ungefähr 85% mit dem des äquivalenten Java-Client identisch ist.

6.1 Grundlagen

Mit der Java 2 Standard Edition Version 1.4 wurde das Paket java.nio.* eingeführt. In diesem Paket befinden sich zahlreiche Neuerungen, mit deren Hilfe die Netzwerkprogrammierung einfacher und sicherer durchzuführen ist. Das „n" steht dabei für „new", wodurch Sun die Abwärtskompatibilität zu früheren Java-Programmen gewährleisten möchte. Zentrale Neuerungen innerhalb des java.nio.* Paketes sind:

- Buffers, als Datencontainer.
- Charsets, die – vergleichbar mit XML – mit Hilfe von Encodern und Decodern aus zu übertragenden Bytes die korrekten Zeichen formen, bspw. ein „ü".
- Channels, als Repräsentanten von Akteuren (z. B. Clients, Server oder Dateien), die I/OOperationen durchführen können.
- Selectors und SelectionKeys, die multiple und nicht-blockende I/O-Operationen durchführen können.

Anzumerken ist, dass die Klassen der java.nio.* Pakete noch auf die Klassen der alten Pakete (zum Beispiel java.io.* oder java.net.*) zurückgreifen. Im Wesentlichen wurden die neuen Klassen einfach um die alten herumgebaut.

Die Klassen der java.nio.* Pakete nutzen jedoch folgende zwei Klassen, die nicht Bestandteil des java.nio.* Pakets sind, die aber ebenfalls mit der Java Version 1.4 eingeführt wurden:

java.net.SocketAddress: Diese Klasse repräsentiert eine Socket-Adresse ohne genauere Details bezüglich des zu verwendenden Protokolls. Diese Klasse ist abstrakt und wird von spezifischen Klassen (in der Version 1.4 und 1.5 ist dies nur InetSocketAddress) implementiert.

java.net.InetSocketAddress: Die spezifische Implementierung einer SocketAddress. Sie besitzt eine IP-Adresse und einen Port. Alternativ können auch ein Hostname und ein Port angegeben werden.

6.1.1 Zeichensatzgebundenes Lesen und Schreiben von Daten

6.1.1.1 Byteweises Schreiben und Lesen von Daten

Damit beliebige Daten byteweise geschrieben und gelesen werden können, bietet Java ab der Version 1.4 das Paket java.nio.charset an. Die in diesem Paket enthaltenen Klassen Charset, CharsetDecoder und CharsetEncoder reichen vollkommen aus, um Daten zeichensatzgebunden zu schreiben bzw. zu lesen.

Die Klasse Charset wurde nach dem Factory-Pattern entworfen und erzeugt über die statische forName-Methode eine neue Instanz von Charset. Möchte man nun Daten mit einem bestimmten Zeichensatz schreiben, so wird ein CharsetEncoder benötigt. Zum Lesen zeichensatzgebundener Daten wird ein CharsetDecoder benötigt. Beide können über das instanzierte Charset erzeugt werden: