2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Mobile Informationssysteme II — Hochschule Bonn-Rhein-Sieg, WS 09/10 Transmission Control Protocol 59 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Mobile Informationssysteme II — Hochschule Bonn-Rhein-Sieg, WS 09/10 Transmission Control Protocol 61 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol Verbindungsaufbau Mobile Informationssysteme II — Hochschule Bonn-Rhein-Sieg, WS 09/10 62 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol Verbindungsabbau Mobile Informationssysteme II — Hochschule Bonn-Rhein-Sieg, WS 09/10 63 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol Zustände einer TCP-Verbindung Mobile Informationssysteme II — Hochschule Bonn-Rhein-Sieg, WS 09/10 64 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 IPAdresse 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol • 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol I/O mit Client-Sockets Ein Client-Socket verfügt über einen Eingabe- und einen AusgabeStream: • 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol • Socket accept() throws IOException Nimmt einen Verbindungswusch an und erzeugt einen neuen ClientSocket 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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 2. Netzwerkprogrammierung für mobile Geräte Mobile Informationssysteme II — Hochschule Bonn-Rhein-Sieg, WS 09/10 Transmission Control Protocol 78 2. Netzwerkprogrammierung für mobile Geräte Transmission Control Protocol 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