Transmission Control Protocol (TCP) Verbindungsorientiertes Protokoll, zuverlässig, paketvermittelt stream-orientiert bidirektional gehört zur Transportschicht, OSI-Layer 4 spezifiziert in RFC 793 Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 56
Zuverlässigkeit gesendete Daten kommen vollständig an korrekte Reihenfolge der Daten keine Duplikate bei den Daten Selbständige Behandlung der Probleme innnerhalb von TCP, Nutzer sehen Byte-Stream Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 57
Client/Server Anbieter eines Dienstes: Server Server ist erreichbar an fester Host/Port-Kombination Nachfrager eines Dienstes: Client Client muss eine Verbindung beim Server anfordern. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 58
Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 59
Aufbau eines TCP-Pakets Der TCP-Kopfteil enthält: Portnummer des Senders (2 Bytes) Portnummer des Empfängers (2 Bytes) weitere Felder, z. B. Sequenznummer und Prüfsumme (16 Bytes) optionale Felder variabler Länge Darauf folgen die Nutzdaten des TCP-Pakets. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 60
Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 61
Verbindungsaufbau Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 62
Verbindungsabbau Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 63
Zustände einer TCP-Verbindung Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 64
TCP-Anwendungen File Transfer Protocol (FTP) Telnet Simple Mail Transfer Protocol (SMTP) Post Office Protocol (POP) Hypertext Transfer Protocol (HTTP) Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 65
TCP-Sockets Unterscheidung zwischen Client- und Server-Socket: Server-Socket Warten auf eintreffende Verbindungsanforderungen, accept() liefert Client-Socket, kann mehrere Clients bedienen Client-Socket Automatische Kontaktaufnaheme mit dem Server bei Erzeugung des Sockets Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 66
Client-Sockets in Java Klasse java.net.socket Socket versucht bei Erzeugung einen Server (Host/Port) zu kontaktieren: Socket(InetAddress address, int port) throws java.net.ioexception Erzeugt einen Client-Socket und versucht eine Verbindung zu der IP- Adresse und dem Port aufzubauen. Socket(String host, int port) throws java.net.unknownhostexception Erzeugt einen Client-Socket und versucht eine Verbindung zum Host und dem Port aufzubauen. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 67
void close() throws IOException Schließt den Socket. boolean isclosed() Liefert true falls der Socket geschlossen ist. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 68
Timeout für Client void setsotimeout(int timeout) throws SocketException Setzt einen Timeout in Millisekunden für den Eingabestrom des Sockets. Ein Aufruf von read() blockiert dann höchstens timeout Millisekunden. java.net.sockettimeoutexception Mit timeout == 0 wird der Timeout deaktiviert. void getsotimeout() Liefert den aktuellen Wert für timeout. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 69
I/O mit Client-Sockets Ein Client-Socket verfügt über einen Eingabe- und einen Ausgabe- Stream: InputStream getinputstream() throws IOException Liefert einen Eingabestrom für den Socket. OutputStream getoutputstream() throws IOException Liefert einen Ausgabestrom für den Socket. Wird einer der beiden Streams mit der Methode close() geschlossen, so wird auch der zugehörige Socket geschlossen. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 70
Selektives Schließen von Socket-Streams Mit den folgenden Methoden ist ein selektives Schließen der Streams möglich: void shutdowninput() throws IOException Setzt den Eingabestrom für den Socket auf EOF. void shutdownoutput() throws IOException Deaktiviert den Ausgabestrom für den Socket. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 71
Server-Sockets in Java Klasse java.net.serversocket ServerSocket(int port) throws IOException Erzeugt einen ServerSocket und bindet ihn an den angegebenen Port des lokalen Rechners. void close() throws IOException Schließt den Server-Socket. boolean isclosed() Liefert true falls der Server-Socket geschlossen ist. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 72
Socket accept() throws IOException Nimmt einen Verbindungswusch an und erzeugt einen neuen Client- Socket für die Verbindung. Die Kommunikation mit dem Client kann dann über den Client-Socket abgewickelt werden. accept() blockiert, bis ein Verbindungswunsch eines Clients vorliegt. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 73
Timeout für Server void setsotimeout(int timeout) throws SocketException Setzt einen Timeout in Millisekunden. Ein Aufruf von accept() blockiert dann höchstens timeout Millisekunden. java.net.sockettimeoutexception Mit timeout == 0 wird der Timeout deaktiviert. void getsotimeout() Liefert den aktuellen timeout. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 74
Backlog Die Verbindungswünsche der Clients, für die mittels accept() noch kein Client-Socket erzeugt wurde, werden in einer Warteschlange, dem Backlog, verwaltet. java.net.connectexception beim Client, falls Backlog voll. Standardgröße (maximale Länge) des Backlogs: 50 ServerSocket(int port, int backlog) throws IOException Hiermit kann bei Erzeugung des Sockets die maximale Länge des Backlogs vorgegeben werden. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 75
Gesamtablauf Client-Server-Kommunikation 1. Der Server erzeugt einen ServerSocket, der an einen vordefinierten Port gebunden ist. 2. Der Server ruft die Methode accept() auf und wartet auf Verbindungswünsche. Der Aufruf von accept() blockiert. 3. Der Client erzeugt einen Socket mit der IP-Adresse (oder Hostnamen) und der Portnummer des Servers. 4. Beim Server wird accept() beendet und liefert als Resultat einen Socket, der eine Verbindung zum Client darstellt. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 76
5. Client und Server erzeugen mit den Methoden getinputstream() und getoutputstream() Stream-Objekte für die Kommunikation. 6. Nun können Daten mit gewöhnlichen Lese- und Schreiboperation zwischen den Prozessen ausgetauscht werden. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 77
Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 78
Weitere Socket-Methoden InetAddress getlocaladdress() Liefert die lokale IP-Adresse, an die der Socket gebunden ist. int getlocalport() Liefert die lokale Portnummer, an die der Socket gebunden ist. InetAddress getinetaddress() Liefert die entfernte IP-Adresse, mit der der Socket verbunden ist. int getport() Liefert die entfernte Portnummer, mit der der Socket verbunden ist. Mobile Informationssysteme II Hochschule Bonn-Rhein-Sieg, WS 09/10 79