40 likes | 102 Views
Explore TCP/IP networks through practical exercises: setting up client-server connections, using sockets efficiently, and managing data streams. Learn more with hands-on examples in Java programming.
E N D
TCP/IP Learning By Doing Request Client 1212.243.19.1 Server 130.92.13.49 DemonPort 80 Client 2212.243.19.2 Response DemonPort 3306 Client 3212.243.19.3 Netzwerke mit TCP/IP • Das Internet verwendet weitgehend das rund 30-jährige TCP/IP-Protokoll (TCP: Transmission Control Protocol, IP: Internet Protocol) • Jedes teilnehmende Gerät (Computer, Drucker, usw.), Knoten genannt, besitzt eine ein- deutige IP-Adresse aus 4 bytes = 32 bit, in der gepunkteten Form nnn.nnn.nnn.nnn, wo nnn eine Dezimalzahl zwischen 0 und 255 ist, beispielsweise 130.92.13.49. Ein hierarchischerDomain Name Service (DNS) erlaubt die Verwendung von IP-Aliasis, z.B. www.unibe.ch • Unter TCP/IP werden die Informationen paketweise übertragen. Es ist fehlertolerant, da an Hand einer Prüfsumme Fehler erkannt und ein fehlerhaftes Paket neu angefordert werden • TCP/IP beruht auf einer Client-Server-Hierarchie und nicht auf einem Netzwerk gleichwertiger Knoten (kein peer-to-peer) • Ein Client führt einen Request an eine bestimmte IP-Adresse mit Angabe eines bestimmtenPorts (0...65535) aus. Ein Demon des Servers überwacht diesen Port, nimmt den Request entgegen, verarbeitet ihn und liefert einen Response an den Client zurück s. Buch S. 503ff
Sockets Learning By Doing Sockets • Sockets legen so viele Schichten über die Komplexität der Netzwerkverbindungen, dass diese wie ein Datenstrom (Stream), analog einer Dateioperation, aufgefasst werden können • Einen Socket kann man auch als Zugangspforte eines IP-Verbindungskanals zwischen einem Server (Host) und einem Client auffassen • Für einen Client sind die wichtigsten Socket-Operationen: - Verbindung erstellen (open) - Daten senden (send) - Daten empfangen (read) - Verbindung beenden (close) • Für einen Server kommen noch folgende Operationen hinzu: - Binden eines IP-Ports (bind) - Verbindungsaufforderung annehmen (accept) • In Java werden Sockets ausserordentlich gut unterstützt, Socket-Programmierung ist daher verglichen mit anderen Programmiersprachen mit wenig Aufwand verbunden • Socket-Programmierung ist im Internet-Zeitalter sehr motivierend und eignet sich gut für den thematischen Unterricht und Maturaarbeiten
Daytime Client Learning By Doing // WbzEx20.java import java.net.*; import java.io.*; import ch.aplu.util.*; public class WbzEx20 extends Console { private static final String HOSTNAME = "ntp1.ptb.de"; private static final int PORT = 13; public WbzEx20() { BufferedReader reader = null; Socket socket = null; String line; println("Trying to connect to " + HOSTNAME + "..."); try { socket = new Socket(HOSTNAME, PORT); println("Connection established"); socket.setSoTimeout(15000); // 15 sec reader = new BufferedReader( new InputStreamReader( socket.getInputStream())); println("Response:"); while ((line = reader.readLine()) != null) { println(line); } } Phys.-Techn. Bundesanstalt catch (IOException ex) { println("Error " + ex); } finally { try { if (reader != null) reader.close(); if (socket != null) socket.close(); } catch (IOException ex) {} } } public static void main(String args[]) { new WbzEx20(); } } Stream und Socketschliessen Verbindung erstellen Timeout fürreadline() Stream erzeugen Daten vom Host lesenblockierend Daten aus-schreiben Daytime-Client Nach der Annahme der Verbindung auf Port 13 sendet der Server einen String mit der aktuellen Datums-Zeit
Web-Reader Learning By Doing // WbzEx20a.java ... (wie WbzEx20.java) public class WbzEx20a extends Console { private static final String HOSTNAME = "www.unibe.ch"; private static final int PORT = 80; public WbzEx20a() { BufferedReader reader = null; Socket socket = null; String line; println("Trying to connect to " + HOSTNAME + "..."); try { socket = new Socket(HOSTNAME, PORT); socket.setSoTimeout(15000); // 15 sec println("Connection established"); PrintWriter out = new PrintWriter(socket.getOutputStream()); out.print("GET / HTTP/1.0\r\n\r\n"); out.flush(); reader = new BufferedReader( new InputStreamReader(socket.getInputStream())); println("Response:"); while ((line = reader.readLine()) != null) { println(line); } } ... (wie WbzEx20.java) Output-Stream erzeugen HTTP GET-Request Response lesen und ausschreiben Stream leeren, damit mit Sicherheit ausgeschrieben Web-Reader Nach der Annahme der Ver- bindung auf Port 80 sendet der Client den HTTP-String GET / HTTP/1.0 gefolgt von zwei Leerzeilen