Skriptum
Skriptum
Skriptum
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
KAPITEL 2. PROGRAMMIERSCHNITTSTELLEN UNTER UNIX 50<br />
while ((len = in.read(b)) != -1) {<br />
System.out.write(b, 0, len);<br />
}<br />
in.close();<br />
sock.close();<br />
} catch (IOException e) {<br />
System.err.println(e.toString());<br />
System.exit(1);<br />
}<br />
} // main<br />
} // class DayTime<br />
2.4.4 Server zur verbindungsorientierten Kommunikation<br />
Ein Socket-Server unterscheidet sich in seinem Verhalten stark von dem des Clients.<br />
Deshalb existiert dafür auch eine eigene Klasse ServerSocket. Ihre wichtigsten Methoden<br />
sind der Konstruktor und accept():<br />
public ServerSocket(int port)<br />
throws IOException<br />
public Socket accept()<br />
throws IOException<br />
Der Konstruktor erzeugt einen Socket und verwendet default-Werte für die Routinen<br />
listen() und bind() (vgl. dazu die Beschreibung des C-Interface ab Seite<br />
34). Andere Konstruktoren erlauben hier Feineinstellungen. Socket accept() wartet<br />
genau wie beim C-Interface auf einen eingehenden Request eines Client. Die<br />
eigentliche Kommunikation erfolgt wieder mit Hilfe des von accept() retournierten<br />
Socket. Auch hier schließt close () wiederum den Socket.<br />
Auch in Java sind spezielle Maßnahmen notwendig, wenn mehr als ein Client<br />
gleichzeitig servisiert werden soll. Anders als die mit fork() erzeugten schwergewichtigen<br />
Prozesse werden in Java gerne leichtgewichtige Threads erzeugt. Bei ihnen<br />
werden u.a. keine getrennen Datenbereiche eingerichtet. Ein Echo-Server der diese<br />
Anforderungen erfüllt könnte folgendermaßen aussehen:<br />
import java.net.*;<br />
import java.io.*;<br />
public class EchoServer<br />
{