2.29k likes | 2.47k Views
Netzwerk-programmierung. Sommersemester 2007. Inhalt der LV. Grundlegende Begriffe Konzepte des WWW HTML (DOM, JS, CSS, XHTML) HTTP Protokoll Socketprogrammierung TCP Client/Server UDP / UDP Multicast Java Socketprogrammierung Dynamisch Klassen über Netzwerke laden
E N D
Netzwerk-programmierung Sommersemester 2007
Inhalt der LV • Grundlegende Begriffe • Konzepte des WWW • HTML (DOM, JS, CSS, XHTML) • HTTP Protokoll • Socketprogrammierung • TCP Client/Server • UDP / UDP Multicast • Java Socketprogrammierung • Dynamisch Klassen über Netzwerke laden • Remote Technologien • Java RMI • .NET Remoting • RMI und .NET Remoting Callbacks • WebServices • Anwendungen im Web-Browser • Java Applets • .NET im Browser • Java Servlets und Java Server Pages (JSP) Netzwerkprogrammierung
Grundlegende Begriffe • Computernetzwerke • Ansammlung von Computern und anderen Geräten, welche Informationen austauschen und bereitgestellte Dienste nutzen Netzwerkprogrammierung
Grundlegende Begriffe • Client / Server Modell • Server stellt Dienste zur Verfügung • Client(s) greifen auf diese Dienste zu • Server und Client können sich auch beide auf dem selben Rechner befinden • Client initiiert die Verbindung zum Server (in der Regel) • Clients kennen die Adresse des Servers • Server kennt erst seine Clients, wenn sich diese bei ihm anmelden Netzwerkprogrammierung
Grundlegende Begriffe Client – Server Modell Netzwerkprogrammierung
Grundlegende Begriffe • Netzwerkkommunikation • Kommunikation beschrieben durch das OSI Schichtenmodell • Netzwerkorientiert Schicht 1-4 im OSI • Anwendungsorientiert Schicht 5-7 im OSI Netzwerkprogrammierung
Grundlegende Begriffe OSI Referenzmodel - Zusammenbau des Pakets Netzwerkprogrammierung
Grundlegende Begriffe Einordnung der Protokolle Paket wieder einlesen Auspacken wie Kisten in Kisten Netzwerkprogrammierung
Grundlegende Begriffe z.B.: 0x06 für TCP oder 0x11 für UDP IP Paket – Header Dem Header folgt Datenbereich(z.B.: TCP Paket) Netzwerkprogrammierung
Grundlegende Begriffe • TCP/IP • Seit Mitte der 90er: eingesetzt für WWW • Im OSI Transport Layer (Schicht 4) • Full Duplex (Daten senden und Empfangen gleichzeitig möglich) • Paketorientiert • Verbindungsorientiert – Dauerverbindung / Standleitung Netzwerkprogrammierung
Grundlegende Begriffe TCP Datenaustausch und Bestätigung Netzwerkprogrammierung
Grundlegende Begriffe TCP Timeout und erneutes Senden Netzwerkprogrammierung
Grundlegende Begriffe • UDP • unsicher (keine Empfangsbestätigung) • Datagramme sind untereinander unabhängig • Keine Prüfung ob Empfänger überhaupt online ist • UDP ähnlich einer Postwurfsendung (Spam) und TCP ähnlich eines Telefonanrufs Netzwerkprogrammierung
Grundlegende Begriffe UDP Pakete werden verschickt aber keine Bestätigung zurückgesendet Netzwerkprogrammierung
Grundlegende Begriffe Ein UDP Broadcast Datagramm wird ins Netz geschickt Alle Rechner im Netz empfangen das Paket Netzwerkprogrammierung
Grundlegende Begriffe • In C oder ASM • Verwendung und Konstruktion von TCP/UDP Paketen mitunter per Hand • Empfang und Bufferung dem Entwickler selbst überlassen • In höheren Programmiersprache (Java, .NET,..) • Stream Gedanke – Verarbeitung der Netzwerkverbindung wie eine lokale Datei • Bufferung kann durch das Framework automatisch erfolgen • Damit leichtere Entwicklung, aber weniger spezial Lösungen möglich (neue Protokolle oder ähnliches) Netzwerkprogrammierung
Grundlegende Begriffe • URLs • Uniform Resource Locator (URL, engl. „einheitlicher Quellenanzeiger“) • Symbolische Adresse www.hs-zigr.de und physikalische Adresse 141.46.8.60 • Unterkategorie von URI (Uniform Resource Identifier) • URI bezieht alle Schemas ein (file:// mailto: file://)URL eigentlich nur http:// und ftp:// Netzwerkprogrammierung
Grundlegende Begriffe • Proxy Server • Befindet sich zwischen lokalem Netz und Internet • Proxy Server holt angeforderte Daten aus dem Internet und gibt sie zum anfragendem Rechner stellvertretend weiter • In Application-Schicht angesiedelt • Caching möglich • Nachteile: meist nur wenige Protokolle erlaubt, Programme wie ICQ funktionieren über einen Proxy Server oftmals nicht • Vorteil: kann beschleunigen, kann mehr Sicherheit bieten, da Clients nicht selbst ins Netz gehen Netzwerkprogrammierung
Grundlegende Begriffe Proxy-Server Modell Netzwerkprogrammierung
Grundlegende Begriffe • Ports und Sockets • URLs zur Adressierung einzelner Knoten im Netz (Rechner) • Serverprozess selbst muss adressiert werden (welche Dienst soll angesprochen werden) • Port – jeder Dienst bekommt eine Nummer • Jede Portnummer kann nur einmal vergeben werden auf einem Rechner • Erstellt man einen neuen Dienstprozess bekommt dieser vom System einfach einen freien Port zugewiesen (bei Serverprozessen meist unerwünscht) • Jeder Port entspricht einem Socket (Steckdose) Netzwerkprogrammierung
Grundlegende Begriffe # 1 - 65536 Netzwerkprogrammierung
Grundlegende Begriffe • Standardisierte Ports (well known - TCP): • 80: http (Webserver) • 21: ftp (Fileserver) • 22: sftp (sicherer Fileserver) • 25: smtp (Email-Versanddienst) • … • Operationen auf Sockets: • Öffnen • Lesen / Schreiben • Schließen • Hören (auf eingehende Verbindung warten) • Akzeptieren (eine eingehende Verbindung annehmen) • Binden (einem Serverprozess einen ganz bestimmten Port zuweisen) Netzwerkprogrammierung
Konzepte des WWW • HTML • Entstehung: • In der Schweiz (Genf) 1989 USA (MIT) • Eigenschaften: • Geräteunabhängig • Sprache zur Darstellung von Inhalten wie Texten, Bildern und Hyperlinks in Dokumenten • Kein Seitenkonzept wie etwa bei PostScript Netzwerkprogrammierung
Konzepte des WWW Aufbau eines HTML Dokuments: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Titel der Webseite</title> </head> <body> Inhalt der Webseite </body> </html> Netzwerkprogrammierung
Konzepte des WWW • Tags und Attribute • <TAG>…</TAG> • <TAG attribut1="abc">…</TAG> • Bis auf wenige Ausnahmen wie XML • Heute immer mehr XHTML • HTML welches XML konform ist • z.B.: <br> muss nun <br/> sein • <img src="pic.jpg" /> Netzwerkprogrammierung
Konzepte des WWW • CSS (Cascading Style Sheets) • legt fest, wie ein besonders ausgezeichneter Inhalt in einem HTML/XML Dokument dargestellt wird • Kann sowohl als separate Datei angelegt werden, oder in das HTML Dokument eingebettet werden Netzwerkprogrammierung
Konzepte des WWW • CSS (Cascading Style Sheets) Netzwerkprogrammierung
Konzepte des WWW <input name="e1" style="border:none;border-bottom: 2px dashed black;" /> Gute Beispiele und Referenz: http://de.selfhtml.org/ Netzwerkprogrammierung
Konzepte des WWW • JavaScript • Clientseitige Programmiersprache in HTML eingebettet (oder externe Datei) • Erlaubt dynamische Inhalte • Erweitert die Möglichkeiten von HTML grundlegend (JavaScript hier stellvertretend für alle Browser-Scriptsprachen wie VBScript) Netzwerkprogrammierung
Konzepte des WWW • JavaScript und DOM • HTML Seite ist zur Laufzeit durch ein DOM Object (Document Object Model) beschrieben • Per JavaScript kann das DOM verändert werden • http://de.selfhtml.org/dhtml/beispiele/anzeige/datumuhr.htm • http://de.selfhtml.org/javascript/beispiele/anzeige/taschenrechner.htm Netzwerkprogrammierung
Konzepte des WWW • Hinweis: • Um heute dynamische Webanwendungen zu entwickeln, ist JavaScript, DOM, CSS ein Muss! • Wenn Sie etwas Freizeit haben, schauen Sie sich Beispiele in SelfHTML an und entwickeln Sie selbst kleine dynamische HTML Seiten Netzwerkprogrammierung
Konzepte des WWW • HTTP Hypertext Transfer Protocol • Aufbau der Verbindung des Webbrowsers mittels TCP/IP • TCP Paketinhalt in Form von HTTP • HTTP ist ein Klartext-Protokoll (man kann es als Mensch lesen) • HTTP-Request und HTTP-Response (Anfrage und Antwort) Netzwerkprogrammierung
Konzepte des WWW • Größte Bedeutung hat jeweils die 1. Zeile • Andere Angaben sind meist nicht zwingend nötig • Ergebniscodes • 200-299 Erfolg (alles Ok) • 300-399 Umleitung (auf andere Seite) • 400-499 Fehler Clientseite (z.B.: falsche URL eingegeben) • 500-599 Fehler Serverseite (ein Serverscript hat Fehler verursacht) • Content-Typen (MIME-Typen) • text/html • text/plain • image/gif • image/jpeg • application/octet-stream • application/msword • multipart/form-data • http ist Zustandslos –Anfragen sind nicht miteinander verbunden Netzwerkprogrammierung
Konzepte des WWW Web-Server was passiert wenn eine Webseite angefordert wird Netzwerkprogrammierung
Konzepte des WWW • Fragen: • Beim öffnen einer typischen Webseite mit Bilder, StyleSheets, JavaScriptenWie viele http-Requests sendet der Browser zum Server? • Ist paralleles herunterladen beim öffnen einer Webseite möglich/sinnvoll? Netzwerkprogrammierung
Ausblick Übungsaufgabe 1 Entwickeln Sie einen minimalistischen Webserver. Entscheiden Sie dabei selbst ob Ihr Webserver mehrere Anfragen gleichzeitig behandeln kann oder nicht. Konzentrieren Sie sich beim parsen des http-Request Headers auf die erste Zeile und implementieren Sie den Befehl GET. Generieren Sie einen http-Response Header, der von einem Browser verstanden wird und auch der Seiteninhalt (HTML Seite, Bilder) angezeigt wird. Sie können in 2er Gruppen zusammenarbeiten. Netzwerkprogrammierung
Socket Programmierung • Um die Übungsaufgabe Lösen zu könne, benötigen wir Sockets. • Server Entwickeln: • Verwendung von ServerSocket in Java. Als Client nehmen wir zum Testen „telnet“ • Wie verwenden TCP als Transportprotokoll Netzwerkprogrammierung
Socket Programmierung import java.io.*; import java.net.*; publicclass _1_ServerSocket { publicstaticvoid main( String[] args ) { ServerSocket server; // unser ServerSocket try { server = newServerSocket(1111); // maximal 65536 Socket client = server.accept(); // blockiert! PrintWriter clientOut = new PrintWriter(new BufferedOutputStream(client.getOutputStream())); clientOut.println("Hallo Client...\nBye."); clientOut.flush(); // damit Buffer übertragen wird! client.close(); } catch (IOException ex) { System.out.println(ex); } } } Netzwerkprogrammierung
Socket Programmierung Test mit telnet: Netzwerkprogrammierung
Socket Programmierung • Was kann unser Server: • genau eine Verbindung entgegennehmen • einmalig eine Textnachricht an den Client senden • Verbindung mit Client trennen • Server wird beendet • Erweitern wir den Server mit: • Server arbeitet dauerhaft und kann beliebig viele Verbindungen verarbeiten • Client kann auch Daten zum Server senden Netzwerkprogrammierung
Socket Programmierung import java.io.*; import java.net.*; publicclass _2_ServerSocket { publicstaticvoid main(String[] args){ ServerSocket server; try { server = newServerSocket(1111); // maximal 65536 while (true){// wiederhole immer wieder! Socket client = server.accept(); PrintWriter clientOut = newPrintWriter(new BufferedOutputStream(client.getOutputStream())); BufferedReader clientIn = newBufferedReader(new InputStreamReader(client.getInputStream())); clientOut.println("Hallo Client...\nBye."); clientOut.flush(); String str = clientIn.readLine();// empfangen System.out.println(str);// auf Serverseite ausgeben client.close(); } } catch (IOException ex){ System.out.println(ex); } } } Netzwerkprogrammierung
Socket Programmierung • Was kann unser Server: • Endlos viele Verbindung entgegennehmen • einmalig eine Textnachricht für den Client ausgeben • einmalig eine Textnachricht empfangen • Verbindung mit Client trennen • Was kann unser Server nicht: • mehrer Clients gleichzeitig – parallel – bedienen • Clients müssen sich „anstellen“ in einer Warteschlange Netzwerkprogrammierung
Socket Programmierung • Multithreaded Server • Wir verwenden für jeden Client einen eigenen Thread. Damit können diese quasi-parallel abgearbeitet werden. • Hinweis: • In der Praxis können sich mehrere 1000 Clients gleichzeitig verbinden wollen sehr viele Threads verlangsamen das System (zu viel Verwaltung durch BS nötig). Deshalb werden auch Thread-Pools eingesetzt (z.B.: 100 feste Arbeitsthreads). Netzwerkprogrammierung
Socket Programmierung import java.io.*; import java.net.*; publicclass _3_MultiThreaded { public class ClientThread extends Thread{ // ein Thread publicSocket clientSocket = null; public ClientThread(Socket s) { clientSocket = s; } public void run() {// wird aufgerufen wenn Thread gestartet wird! try { PrintWriter clientOut = newPrintWriter(new BufferedOutputStream(clientSocket.getOutputStream())); BufferedReader clientIn = newBufferedReader(new InputStreamReader(clientSocket.getInputStream())); clientOut.println("Hallo Client...\nBye."); clientOut.flush(); String str = clientIn.readLine(); System.out.println(str); clientSocket.close(); } catch (IOException ex) { System.out.println(ex);} } } Netzwerkprogrammierung
Socket Programmierung publicvoid runServer() { ServerSocket server; try { server = newServerSocket(1111); // maximal 65536 while (true) { Socket client = server.accept(); ClientThread ct = new ClientThread(client); ct.start(); } } catch (IOException ex) { System.out.println(ex);} } publicstaticvoid main(String[] args) { System.out.println("*******************************************"); System.out.println("*>>>-----------------------------------<<<*"); System.out.println("*>>> Multithreaded Server <<<*"); System.out.println("*>>>-----------------------------------<<<*"); System.out.println("*******************************************"); _3_MultiThreaded prog = new _3_MultiThreaded(); prog.runServer(); } } Netzwerkprogrammierung
Socket Programmierung Nun können wir mit mehreren Telnet Clients gleichzeitig testen: Netzwerkprogrammierung
Socket Programmierung • Was kann unser Server: • beliebig viele Verbindungen parallel entgegennehmen • einmalig eine Textnachricht für den Client ausgeben • einmalig eine Textnachricht empfangen • Verbindung mit Client trennen • Fragen: • Kann man unseren Server über einen Webbrowser ansprechen und wenn wie? • Wenn Ja, was würde im Webbrowser und im Server angezeigt werden? Netzwerkprogrammierung
Socket Programmierung Netzwerkprogrammierung
Übungsaufgabe 1 Entwickeln Sie einen minimalistischen Webserver. Entscheiden Sie dabei selbst ob Ihr Webserver mehrere Anfragen gleichzeitig behandeln kann oder nicht. Konzentrieren Sie sich beim parsen des http-Request Headers auf die erste Zeile und implementieren Sie den Befehl GET. Generieren Sie einen http-Response Header, der von einem Browser verstanden wird und auch der Seiteninhalt (HTML Seite, Bilder) angezeigt wird. Entwickeln Sie ihr Programm mit Java und verwenden Sie die Klassen Socket und ServerSocket. Nach eigenem Kenntnisstand können Sie eine Konsolenanwendung oder Fensteranwendung erstellen. Netzwerkprogrammierung