"A socket is one end-point of a two-way communication link between two programs
running on the the network. Socket classes are used to represent the connection between
a client program and a server program. The java.net package provides two classes--
Socket and ServerSocket--that implement the client side of the connection and the server
side of the connection, respectively."
| UDP: | DatagramSocket.classund DatagramPacket.classund MulticastSocket.class |
| TCP: | Socket.classund ServerSocket.classund SocketImpl.class |

bind() (vgl. Kapitel 1) sind in der API verborgen und der Programmierer muß sie nicht gesondert aufrufen. Durch das Verbergen dieser Details sind mit Java sehr kurze und verhältnismäßig leistungsstarke Programme möglich. So wurden inzwischen primitive HTTP-Webserver in Java programmiert, mit weniger als 200 Zeilen-Quellcode [6] [6].Socket.classgetInputStream() und getOutputStream(), die
in Kapitel 2.3 erläutert werden. Sie enthält weiterhin Methoden zum Schließen des Socket, zur
Auflösung einer URL-Adresse und zur Abfrage der Portnummer und IP-Adresse etc. Im Falle eines Kommunikationsfehlers "wirft" diese Klasse
eine IOException, eine SocketException oder eine UnknownHostException aus, welche entsprechend behandelt werden muß (vgl. Anhang B: Beispielprogramm "DayTimeClient").ServerSocket.classaccept()-Methode. Diese Methode ist nur auf Serverseite sinnvoll - wird sie abgearbeitet wartet der Server auf eine Anforderung eines
Clienten. In der Java-API ist sie so implementiert, daß es sich aus Programmierersicht um einen "echten Block" handelt. D.h. die
Programmausführung wird (im aktuellen Thread) solange an der accept()-Methode gestoppt, bis
diese ein Client-Objekt zurückliefern kann, d.h. bis ein Client Kontakt mit dem Server aufgenommen hat. Sie muß also nicht in eine Schleife
eingebunden werden noch ist ein Test des zurückgelieferten Objekts auf NULL notwendig! Diese Leistungen sind komplett in der API integriert (vgl. Anhang C: Beispielprogramm "DayTimeServer").SocketImpl.classDatagramPacket.classgetData(), getLength() usw. bearbeitet werden können.DatagramSocket.classsend() und receive() an, welche - je nachdem - auf ein Datagram-Paket warten oder es verschicken. Bei receive() wird solange gewartet, bis tatsächlich ein Paket eingetroffen ist. Eine Überprüfung auf NULL ist also auch hier nicht notwendig.MulticastSocket.class (ab JDK 1.1)MulticastSocket.class" ist eine spezielle Klasse für einen netzwerkweiten Datagram-Broadcast. Wie bereits erwähnt gibt es Fälle, in denen ein solches Vorgehen aufgrund der höheren Performance von UDP-Datagrammen sinnvoll ist. Die Klasse ist vollständig von der oben beschriebenen Klasse "DatagramSocket.class" abgeleitet.java.net-, sondern im java.io-Paket. Wie gesagt, lassen sich Streams auch für Aufgaben des Betriebssystems nutzen und ihre Leistungsfähigkeit übersteigt leicht "einfache Netzoperationen" (der java.net-Klasse).getInputStream/getOutputStream. Dieses Objekt kann dann mit einem "FilteredStream" o.ä. aus der IO-Klasse verknüpft werden und der erfolgreichen Datenübertragung steht nichts mehr im Wege.Serializable-Schnittstelle eine einfache Möglichkeit auch solche zu verschicken. Die Auflösung der Referenzen übernimmt hierbei auch Java. So bekommt jeder String , jede Integer usw. des zu übertragenden Objekts ein sogenanntes Handle. Java kann dann erkennen", welche Objekte bereits übertragen wurden und vermeidet auch eine Endlosschleife bei ringartigen Verküpfungen (z.B.: class A refernziert class B und umgekehrt). Solche komplexen Objekte werden auf der Seite des Empfängers wieder identisch im Speicher abgebildet!