1 / 229

Netzwerk-programmierung

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

dea
Télécharger la présentation

Netzwerk-programmierung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Netzwerk-programmierung Sommersemester 2007

  2. 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

  3. Grundlegende Begriffe • Computernetzwerke • Ansammlung von Computern und anderen Geräten, welche Informationen austauschen und bereitgestellte Dienste nutzen Netzwerkprogrammierung

  4. 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

  5. Grundlegende Begriffe Client – Server Modell Netzwerkprogrammierung

  6. Grundlegende Begriffe • Netzwerkkommunikation • Kommunikation beschrieben durch das OSI Schichtenmodell • Netzwerkorientiert Schicht 1-4 im OSI • Anwendungsorientiert Schicht 5-7 im OSI Netzwerkprogrammierung

  7. Grundlegende Begriffe OSI Referenzmodel - Zusammenbau des Pakets Netzwerkprogrammierung

  8. Grundlegende Begriffe Einordnung der Protokolle Paket wieder einlesen Auspacken wie Kisten in Kisten Netzwerkprogrammierung

  9. 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

  10. 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

  11. Grundlegende Begriffe TCP Datenaustausch und Bestätigung Netzwerkprogrammierung

  12. Grundlegende Begriffe TCP Timeout und erneutes Senden Netzwerkprogrammierung

  13. 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

  14. Grundlegende Begriffe UDP Pakete werden verschickt aber keine Bestätigung zurückgesendet Netzwerkprogrammierung

  15. Grundlegende Begriffe Ein UDP Broadcast Datagramm wird ins Netz geschickt Alle Rechner im Netz empfangen das Paket Netzwerkprogrammierung

  16. 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

  17. 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

  18. 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

  19. Grundlegende Begriffe Proxy-Server Modell Netzwerkprogrammierung

  20. 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

  21. Grundlegende Begriffe # 1 - 65536 Netzwerkprogrammierung

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. Konzepte des WWW • CSS (Cascading Style Sheets) Netzwerkprogrammierung

  28. Konzepte des WWW <input name="e1" style="border:none;border-bottom: 2px dashed black;" /> Gute Beispiele und Referenz: http://de.selfhtml.org/ Netzwerkprogrammierung

  29. 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

  30. 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

  31. 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

  32. 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

  33. Netzwerkprogrammierung

  34. 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

  35. Konzepte des WWW Web-Server was passiert wenn eine Webseite angefordert wird Netzwerkprogrammierung

  36. 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

  37. 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

  38. 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

  39. 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

  40. Socket Programmierung Test mit telnet: Netzwerkprogrammierung

  41. 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

  42. 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

  43. 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

  44. 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

  45. 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

  46. 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

  47. Socket Programmierung Nun können wir mit mehreren Telnet Clients gleichzeitig testen: Netzwerkprogrammierung

  48. 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

  49. Socket Programmierung Netzwerkprogrammierung

  50. Ü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

More Related