Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Netzwerk- programmierung Sommersemester 2007. Inhalt der LV Grundlegende Begriffe Konzepte des WWW HTML (DOM, JS, CSS, XHTML) HTTP Protokoll Socketprogrammierung.

Ähnliche Präsentationen


Präsentation zum Thema: "Netzwerk- programmierung Sommersemester 2007. Inhalt der LV Grundlegende Begriffe Konzepte des WWW HTML (DOM, JS, CSS, XHTML) HTTP Protokoll Socketprogrammierung."—  Präsentation transkript:

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 2

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

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 4

5 Grundlegende Begriffe Netzwerkprogrammierung 5 Client – Server Modell

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

7 Grundlegende Begriffe OSI Referenzmodel - Zusammenbau des Pakets Netzwerkprogrammierung 7

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

9 Grundlegende Begriffe IP Paket – Header Dem Header folgt Datenbereich (z.B.: TCP Paket) Netzwerkprogrammierung 9 z.B.: 0x06 für TCP oder 0x11 für UDP

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 10

11 Grundlegende Begriffe Netzwerkprogrammierung 11 TCP Datenaustausch und Bestätigung

12 Grundlegende Begriffe Netzwerkprogrammierung 12 TCP Timeout und erneutes Senden

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 13

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

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

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 16

17 Grundlegende Begriffe URLs Uniform Resource Locator (URL, engl. einheitlicher Quellenanzeiger) Symbolische Adresse und physikalische Adresse www.hs-zigr.de Unterkategorie von URI (Uniform Resource Identifier) URI bezieht alle Schemas ein (file:// mailto: file://) URL eigentlich nur und ftp:// Netzwerkprogrammierung 17

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 18

19 Grundlegende Begriffe Netzwerkprogrammierung 19 Proxy-Server Modell

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 20

21 Grundlegende Begriffe Netzwerkprogrammierung 21 #

22 Grundlegende Begriffe Standardisierte Ports (well known - TCP): 80: http (Webserver) 21: ftp (Fileserver) 22: sftp (sicherer Fileserver) 25: smtp ( -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 22

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 23

24 Konzepte des WWW Aufbau eines HTML Dokuments: Titel der Webseite Inhalt der Webseite Netzwerkprogrammierung 24

25 Konzepte des WWW Tags und Attribute … Bis auf wenige Ausnahmen wie XML Heute immer mehr XHTML HTML welches XML konform ist z.B.: muss nun sein Netzwerkprogrammierung 25

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 26

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

28 Konzepte des WWW Gute Beispiele und Referenz: Netzwerkprogrammierung 28

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 29

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 hr.htm hr.htm henrechner.htm henrechner.htm Netzwerkprogrammierung 30

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 31

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 32

33 Netzwerkprogrammierung 33

34 Konzepte des WWW Größte Bedeutung hat jeweils die 1. Zeile Andere Angaben sind meist nicht zwingend nötig Ergebniscodes Erfolg (alles Ok) Umleitung (auf andere Seite) Fehler Clientseite (z.B.: falsche URL eingegeben) 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 34

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

36 Konzepte des WWW Fragen: Beim öffnen einer typischen Webseite mit Bilder, StyleSheets, JavaScripten Wie viele http-Requests sendet der Browser zum Server? Ist paralleles herunterladen beim öffnen einer Webseite möglich/sinnvoll? Netzwerkprogrammierung 36

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 37

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 38

39 Socket Programmierung import java.io.*; import java.net.*; public class _1_ServerSocket { public static void main( String[] args ) { ServerSocket server; // unser ServerSocket try { server = new ServerSocket(1111); // maximal 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 39

40 Socket Programmierung Test mit telnet: Netzwerkprogrammierung 40

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 41

42 Socket Programmierung import java.io.*; import java.net.*; public class _2_ServerSocket { public static void main(String[] args){ ServerSocket server; try { server = new ServerSocket(1111); // maximal while (true){ // wiederhole immer wieder! Socket client = server.accept(); PrintWriter clientOut = new PrintWriter(new BufferedOutputStream(client.getOutputStream())); BufferedReader clientIn = new BufferedReader(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 42

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 43

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 44

45 Socket Programmierung import java.io.*; import java.net.*; public class _3_MultiThreaded { public class ClientThread extends Thread { // ein Thread public Socket clientSocket = null; public ClientThread(Socket s) { clientSocket = s; } public void run() { // wird aufgerufen wenn Thread gestartet wird! try { PrintWriter clientOut = new PrintWriter(new BufferedOutputStream(clientSocket.getOutputStream())); BufferedReader clientIn = new BufferedReader(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 45

46 Socket Programmierung public void runServer() { ServerSocket server; try { server = new ServerSocket(1111); // maximal while (true) { Socket client = server.accept(); ClientThread ct = new ClientThread(client); ct.start(); } catch (IOException ex) { System.out.println(ex);} } public static void 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 46

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

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 48

49 Socket Programmierung Netzwerkprogrammierung 49

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 50

51 Übungsaufgabe 1 Hinweise: http-Response: clientOut.println("HTTP/ OK"); clientOut.println("Content-Type: text/html"); clientOut.println(""); // Header zuende - eine Leerzeile !!! clientOut.println(" TEST "); clientOut.flush(); Verwenden Sie Datei-Streams um Dateien (HTML, Bilder) zu öffnen und deren Inhalt in clientOut zu schreiben. Netzwerkprogrammierung 51

52 Sprachvergleich mit C++ #include #pragma comment( lib, "wsock32.lib") bool IS_SERVER_RUNNING = true; bool PROGRAM_IS_RUNNING = true; unsigned short PORT = 1111; // Server Port struct AClient { SOCKET Socket; // Socket auf welchem wir arbeiten HANDLE ThreadHandle; // der mit diesem Client verbundene Thread }; DWORD WINAPI ClientThreadFunc( LPVOID ClientData ) { AClient* Data = (AClient*)ClientData; // Wir senden ein Hallo Welt an den Clienten // char* Text = "Hallo Welt!\n"; send(Data->Socket,Text,strlen(Text),0); // Beenden der Verbindung // closesocket(Data->Socket); delete Data; return 0; } Netzwerkprogrammierung 52

53 Sprachvergleich mit C++ void CreateClient(SOCKET Sock) { AClient* Data = new AClient[1]; unsigned long ID = 0; HANDLE Handle = 0; Handle = CreateThread(NULL,0,ClientThreadFunc,(void*)Data,CREATE_SUSPENDED,&ID); Data->ThreadHandle = Handle; Data->Socket = Sock; ResumeThread(Handle); } DWORD WINAPI ServerThreadFunc( LPVOID param ) { sockaddr Addr; SOCKET ServerSocket = 0; SOCKET ActClient = 0; ServerSocket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); // Socket erstellen // memset(&Addr,0,sizeof(sockaddr)); // Adresse an die wir den Socket binden wollen festlegen // Addr.sa_family = AF_INET; unsigned short temp = htons(PORT); memcpy(&Addr.sa_data[0],&temp,sizeof(unsigned short)); bind(ServerSocket,&Addr,sizeof(Addr)); // Binden des Sockets an die Adreese (Port) // listen(ServerSocket,SOMAXCONN); // Socket auf listen schalten // while(IS_SERVER_RUNNING){// Auf Clienten warten // ActClient = accept(ServerSocket,NULL,NULL); if(ActClient == INVALID_SOCKET) continue; CreateClient(ActClient); } PROGRAM_IS_RUNNING = false; // Signal zum Beenden des gesamten Programms // return 0; } Netzwerkprogrammierung 53

54 Sprachvergleich mit C++ int main () { // Windows mitteilen das wir Sockets benutzen wollen // WSADATA WsaData; WSAStartup(0x101,&WsaData); unsigned long ThreadID = 0; HANDLE ThreadHandle = 0; ThreadHandle = CreateThread(NULL,0,ServerThreadFunc,NULL,CREATE_SUSPENDED,&ThreadID); ResumeThread(ThreadHandle); // Programm wartet bis Thread fertig ist // // Hier könnte alles mögliche Andere verarbeitet werden // while (PROGRAM_IS_RUNNING) Sleep(1); // wieder aufräumen // WSACleanup(); return 0; } Ergebnis: Befehle sind sehr ähnlich, nur etwas mehr Schreibaufwand und nicht Objektorientiert Netzwerkprogrammierung 54

55 Socket Programmierung Client Entwickeln bislang haben wir fertige Clients verwendet (telnet, Browser) Eigener Client verwendet einen Socket um sich zum Server zu verbinden Lesen und Schreiben auf Socket genau wie bereits im Server Netzwerkprogrammierung 55

56 Socket Programmierung public class _4_ClientSocket { public class ClientThread extends Thread { public void run() { try { Socket clientSocket = new Socket(" ", 1111); PrintWriter clientOut = new PrintWriter(new BufferedOutputStream(clientSocket.getOutputStream())); BufferedReader clientIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); String str = clientIn.readLine(); System.out.println(str); clientOut.println("Hallo zurück"); clientOut.flush(); clientSocket.close(); } catch (IOException ex) { System.out.println(ex); } } public _4_ClientSocket() { ClientThread ct = new ClientThread(); ct.start(); } public static void main(String[] args){ _4_ClientSocket prog = new _4_ClientSocket(); } Netzwerkprogrammierung 56

57 Socket Programmierung Fragen: Bei Consolenprogrammen ist für einen Client kein Thread nötig. Bei einer GUI Anwendung in der Regel jedoch schon – warum? Netzwerkprogrammierung 57

58 Socket Programmierung WGet Client Ziel: Ein Programm entwickeln, welches HTML Daten von einem beliebigen Webserver holt. Aufruf: java wget /index.html Netzwerkprogrammierung 58

59 Socket Programmierung import java.io.*; import java.net.*; public class _5_WGet { public _5_WGet(String host,String file) { ClientThread ct = new ClientThread(host,file); ct.start(); } public static void main(String[] args) { if (args.length < 2) { System.out.println("Aufruf: java _5_wget /file"); } else { _5_WGet prog = new _5_WGet(args[0], args[1]); } Netzwerkprogrammierung 59

60 Socket Programmierung public class ClientThread extends Thread { public Socket clientSocket = null; public String targethost; public String targetfile; public ClientThread(String host, String file){ targethost = host; targetfile = file; } public void run() { try { clientSocket = new Socket(targethost, 80); PrintWriter clientOut = new PrintWriter(new BufferedOutputStream(clientSocket.getOutputStream())); BufferedReader clientIn = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); clientOut.println("GET "+targetfile+" HTTP/1.1"); clientOut.println("Host:" + targethost+":80"); clientOut.println(""); clientOut.flush(); Netzwerkprogrammierung 60

61 Socket Programmierung System.out.println("HTTP-Response-Header:"); String str = clientIn.readLine(); while (!str.equals("")) { System.out.println(str); str = clientIn.readLine(); } System.out.println(""); System.out.println(HTTP-Daten:"); str = clientIn.readLine(); while (!str.equals("")) { System.out.println(str); str = clientIn.readLine(); } clientSocket.close(); } catch (IOException ex){ System.out.println(ex);} } Netzwerkprogrammierung 61

62 Socket Programmierung Netzwerkprogrammierung 62

63 Socket Programmierung UDP verbindungslos Broadcast möglich – senden an alle Rechner in einem Netzwerk Jeder Client entscheidet ob ihn das Paket interessiert oder nicht Eine mögliche Lösung für Chat-Anwendungen Aber zunächst einfache Client-Server- Kommunikation Netzwerkprogrammierung 63

64 Socket Programmierung public class _6_UDPServer { public class ClientThread extends Thread { public DatagramSocket clientSocket = null; public void run() { try { clientSocket = new DatagramSocket(1234); // 1234=Port while (true) { // Ein Paket empfangen: byte[] buf = new byte[256]; DatagramPacket packet = new DatagramPacket(buf, buf.length); clientSocket.receive(packet); String received = new String(packet.getData()); System.out.println("Empfangen: " + received); // sender merken InetAddress sender = packet.getAddress(); // Ein Paket senden: packet.setAddress(sender); received = "Dank zurück :)"; buf = received.getBytes(); packet.setData(buf); clientSocket.send(packet); } Netzwerkprogrammierung 64

65 Socket Programmierung Was kann unser Server: UDP Datagramme annehmen auf Port 1234 Dem Sender eine Nachricht zurücksenden Anfragen werden nicht parallel verarbeitet Verwendet: DatagramSocket und DatagramPacket Netzwerkprogrammierung 65

66 Socket Programmierung Fragen: Warum bekommt nicht jeder eingehende Client einen eigenen Thread wie bei unserem Multithread-TCP Server? Wann würde es Sinn machen Threads zu verwenden? Netzwerkprogrammierung 66

67 Socket Programmierung public class _7_UDPClient { public class ClientThread extends Thread { public DatagramSocket clientSocket = null; public String target; public ClientThread(String Target) { target = Target; } public void run() { try { clientSocket = new DatagramSocket(); // ohne Port byte[] buf = new byte[256]; String sendtext = "Hallo Server :)"; buf = sendtext.getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length); InetAddress to = InetAddress.getByName(target); packet.setPort(1234); packet.setAddress(to); clientSocket.send(packet); clientSocket.receive(packet); String received = new String(packet.getData()); System.out.println("Empfangen: " + received); } catch (IOException ex) { System.out.println(ex); } } public _7_UDPClient(String Target) { ClientThread ct = new ClientThread(Target); ct.start(); } public static void main(String[] args) { if (args.length < 1) { System.out.println("need Target IP as parameter");} else { _7_UDPClient udp = new _7_UDPClient(args[0]); } } Netzwerkprogrammierung 67

68 Socket Programmierung Netzwerkprogrammierung 68

69 Socket Programmierung Verwendung von MulticastSocket An alle Rechner in einem bestimmten Netzwerk senden Einteilung in multicast groups welche in Form einer IP Adresse angegeben werden: bis , dabei ist reserviert und sollte nicht verwendet werden. Ein Client kann sich einer Gruppe anschließen und verlassen Vergleich: IP Adresse ~ Frequenz am Radio Netzwerkprogrammierung 69

70 Socket Programmierung String msg = "Hello"; InetAddress group = InetAddress.getByName(" "); MulticastSocket s = new MulticastSocket(1234); s.joinGroup(group); DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 1234); s.send(hi); String msg = "Hello"; InetAddress group = InetAddress.getByName(" "); DatagramSocket s = new DatagramSocket (); DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 1234); s.send(hi); Netzwerkprogrammierung 70 Multicast Packet in eine Gruppe senden (2 Möglichkeiten):

71 Socket Programmierung Multicast Packet aus einer Gruppe empfangen: InetAddress group = InetAddress.getByName(" "); MulticastSocket s = new MulticastSocket(1234); s.joinGroup(group); // Antwort empfangen byte[] buf = new byte[1000]; DatagramPacket recv = new DatagramPacket(buf, buf.length); // nur Buffer s.receive(recv); String received = new String(recv.getData(),0,recv.getLength()); System.out.println("Empfangen: " + received); s.leaveGroup(group); s.close(); Netzwerkprogrammierung 71

72 Socket Programmierung Beide Clients empfangen zeitgleich das Paket Netzwerkprogrammierung 72

73 Socket Programmierung Fragen: Ein Server möchte all seinen Clients eine Nachricht senden. Besitzt ein UDP-Multicast Vorteile gegenüber einer TCP Übertragung oder einem adressierten UDP Paket? Nennen Sie Beispiel für UDP-Anwendungen, wo eignet sich UDP besonders gut? Netzwerkprogrammierung 73

74 Socket Programmierung Zusammenfassung: Konzept von Sockets / Ports kennen gelernt ServerSocket und Socket für Server und Client Anwendungen verwendet Multithread-Server entwickelt HTTP Protokoll praktisch angewendet TCP und UDP verwendet Die verwendete Programmiersprache spielt dabei eine untergeordnete Rolle Netzwerkprogrammierung 74

75 Übungsaufgabe 2 Entwickeln Sie mit UDP MulticastSocket eine Chat-Anwendung Verwenden Sie 2 Threads (einen für Senden und einen für Empfangen) Gestalten Sie eine einfache GUI für die Anwendung Es ist kein Chat-Server nötig Netzwerkprogrammierung 75

76 Java Socket Programmierung Objekte über das Netzwerk versenden Java kann Objekte über einen ObjectOutputStream schreiben (anwendbar auf Dateien und Socketverbindungen) Objekte müssen java.io.Serializable implementieren Vorteil: Kein parsen von Textübertragungen nötig, sondern ganze Objekte auf einmal Netzwerkprogrammierung 76

77 Java Socket Programmierung java.io.Serializable Serializable ist ein leeres Flag-Interface durch Implementierung wird eine Klasse serialisierbar standardmäßig werden alle Datenelemente, die nicht als static oder transient delariert sind, serialisiert Das gleiche gilt für alle Klassen, die von einer Klasse, die dieses Interface implementiert, abgeleitet sind. Serializieren kann man mit einem Foto des aktuellen Zustands vergleichen Viele Klasse innerhalb von Java sind bereits serialisierbar Netzwerkprogrammierung 77

78 Java Socket Programmierung public class Auto implements java.io.Serializable { String Farbe; int kmStand; AutoTyp Typ; } public class AutoTyp implements java.io.Serializable { String Hersteller; String Typenschluessel; } Netzwerkprogrammierung 78

79 Java Socket Programmierung Textzeile Netzwerkprogrammierung 79 Server Client Farbe KmStand AutoTyp Zeilen auslesen (parsen) und ein Objekt erzeugen. Bisher: Jetzt: Objekt Server Client Auto1 Auto2 Auto3 Fertige Objekte kommen an.

80 Java Socket Programmierung public class ServerSocket { public static void main(String[] args){ ServerSocket server; try { server = new ServerSocket(1111); // maximal while (true){// wiederhole immer wieder! Socket client = server.accept(); OutputStream out = client.getOutputStream(); ObjectOutputStream objectOut = new ObjectOutputStream(out); InputStream in = client.getInputStream(); ObjectInputStream objectIn = new ObjectInputStream(in); Auto a1 = new Auto(); a1.Farbe = "blau"; a1.kmStand = 10000; a1.Typ = new AutoTyp(); a1.Typ.Hersteller = "XYZ"; objectOut.writeObject(a1); // schreiben eines Auto Objekts objectOut.flush(); Auto a2 = (Auto)objectOut.readObject(); // empfangen eines Auto System.out.println(a2.Farbe); // auf Serverseite Farbe ausgeben client.close(); } catch (IOException ex){ System.out.println(ex); } } Netzwerkprogrammierung 80

81 Java Socket Programmierung Fragen: Welche Nachteile hat dies gegenüber der alten Variante mit Textzeilen? Was passiert wenn wir ein Objekt an den Client senden, welches dieser nicht kennt (keine Java-Klasse vorhanden)? Netzwerkprogrammierung 81

82 Java Socket Programmierung Klassen über das Netzwerk versenden Mit Hilfe eines ClassLoaders können Klassen dynamisch geladen werden Ein Interface beschreibt die Funktionsweise der zu ladenden Klasse (damit der Client weiß, wie sie sich verhalten wird) Klasse wird als ByteArray übertragen (Byte Array selbst ist serialisierbar problemlos per ObjectStream zu versenden ) Netzwerkprogrammierung 82

83 Java Socket Programmierung Der Class Loader ist dafür verantwortlich, alle verschiedenen Teile eines Programmes (Java-Klassen) zusammenzubringen, damit es ausführbar wird: JVM Bytecode Internet Class Loader 83 Netzwerkprogrammierung

84 Java Socket Programmierung Aufgaben: Laden,Trennen und Verwalten von Klassen Einteilung in sicher/unsicher Schutz der Java System-Klassen Anmerkungen: o Verhindern von Überschreibung vertrauenswürdiger JVM-Klassen durch gleichnamige Klassen von einem Webserver o Erzeugung konkreter Klassen erst nach dem Verifikationsprozess o Zugriffsrechte auf Elemente innerhalb der Systemklassen-Packages ( java.* ) müssen geschützt werden (Sichtbarkeitsbeschränkungen) Eigene Klassen dürfen deshalb nicht diesen Packages hinzugefügt werden. 84 Netzwerkprogrammierung

85 Java Socket Programmierung 1 eingebauter Class Loader (Primordial Class Loader), der für das Laden der System-Klassen verantwortlich ist meist in C geschrieben volle Rechtevergabe an geladene Klassen es kann bel. viele zusätzliche Class Loader geben für Web-Browser z.B. gibt es den Applet Class Loader für jeden zusätzlichen ClassLoader kann es mehrere Instanzen geben – eine pro Codebase damit: eigene Namespaces keine Namenskollisionen keine Sichtbarkeit zwischen Namespaces 85 Netzwerkprogrammierung

86 Java Socket Programmierung Class Loader Hierarchie: Bei der Suche nach Klassen wird eine Class Loader-Hierarchie durchlaufen: direkte Kommunikation zwischen Class Loadern Suchreihenfolge: System-Klassen lokale Klassen Remote-Klassen Abgeleitete Class Loader (Java2) : Primordial Class Loader java.lang.ClassLoader java.security.SecureClassLoader java.net.URLClassLoader AppletClassLoader Applikation Applet System-Klassen 86 Netzwerkprogrammierung

87 Java Socket Programmierung Der Class File Verifier prüft, ob das Programm nach den Regeln der JVM läuft das bedeutet nicht unbedingt, dass das Programm die Regeln von Java als Sprache befolgt JVM Bytecode Regeln Class File Verifier Internet Class Class Loader 87 Netzwerkprogrammierung

88 Java Socket Programmierung Die 4 Phasen der Verifikation: Datei-Integrität überprüfen Format(0xCAFEBABE), Länge Klassen-Integrität überprüfen Superklasse(wenn vorhanden) nicht final Name und Signatur von Methoden und referenzierten Klassen Bytecode-Integrität überprüfen Datenfluß-Analyse Stack-Checking statische Typüberprüfung Laufzeit-Integrität überprüfen dynamische Typüberprüfungen 88 Netzwerkprogrammierung

89 Java Socket Programmierung Netzwerkprogrammierung 89 Interface beschreibt wie die Calculator Klasse arbeiten wird

90 Java Socket Programmierung Netzwerkprogrammierung 90

91 Java Socket Programmierung Interface für Calculator: Netzwerkprogrammierung 91 public interface ICalculator { public int add(int a, int b); public int sub(int a, int b); public long times(int a, int b) public double div(double a, double b); public double power(double basis, double exp); }

92 Java Socket Programmierung Die Klasse Calculator: Netzwerkprogrammierung 92 public class Calculator implements java.io.Serializable, ICalculator { public Calculator() { } public int add(int a, int b) { return (a+b); } public int sub(int a, int b) { return (a-b); } public long times(int a, int b) { return (a*b); } public double div(double a, double b) { return (a/b); } public double power(double basis, double exp) { return(Math.pow(basis, exp)); } }

93 Java Socket Programmierung ClassServer: Stellt Java-Klassen zur Verfügung Erwartet den Namen der zu übertragenden Klasse Schickt dem Client die geforderte Klasse als ByteArray zurück Netzwerkprogrammierung 93

94 Java Socket Programmierung public class ClassServer { public void server() { try { ServerSocket ss = new ServerSocket(1234); // TCP Socket while(true) { System.out.println("Server at: " + ss.getLocalPort() + "."); Socket s = ss.accept(); // Verbindung annehmen OutputStream out = s.getOutputStream(); ObjectOutputStream objectOut = new ObjectOutputStream(out); InputStream in = s.getInputStream(); ObjectInputStream objectIn = new ObjectInputStream(in); System.out.print("Connected..."); String name = (String)objectIn.readObject(); RandomAccessFile file = new RandomAccessFile("classes/" + name + ".class", "r"); byte data[] = new byte[(int)file.length()]; file.readFully(data); objectOut.writeObject(data); objectOut.flush(); System.out.print("object transmitted..."); s.close(); } }catch(Exception e) { e.printStackTrace(); }} Netzwerkprogrammierung 94

95 Java Socket Programmierung NetClassLoader: Erbt von ClassLoader (eine fertige Java Klasse) Implementiert findClass (String name) Stellt die Verbindung zum ClassServer her und kommuniziert mit diesem ist der eigentliche Client unseres Programms Netzwerkprogrammierung 95

96 Java Socket Programmierung class NetClassLoader extends ClassLoader { String host;int port; public Class findClass(String name) { byte[] b = loadClassData(name); return defineClass(name, b, 0, b.length); } private byte[] loadClassData (String name) { try { Socket s = new Socket(host, port); System.out.print("Connection established..."); InputStream in = s.getInputStream(); ObjectInputStream objectIn = new ObjectInputStream(in); OutputStream out = s.getOutputStream(); ObjectOutputStream objectOut = new ObjectOutputStream(out); objectOut.writeObject(name); // Namen der Klasse die wollen objectOut.flush(); Object o = objectIn.readObject(); // Klasse als Byte Array System.out.print("object received..."); s.close(); System.out.println("connection closed."); return (byte[]) o; } catch (Exception e) { return null; }}} Netzwerkprogrammierung 96

97 Java Socket Programmierung ClassClient Beispielanwendung für NetClassLoader um eine Klasse zu beziehen Verwendet anschließend die dynamisch geladene Klasse Netzwerkprogrammierung 97

98 Java Socket Programmierung public class ClassClient { private NetClassLoader classload = new NetClassLoader(); public Object getObject(String objectName) throws Exception{ classload.port = 1234; classload.host = "localhost"; Class c = classload.findClass(objectName); Object o = c.newInstance(); return o; } public void performTask() { try {// get an instance (object) out of the class ICalculator calc = (ICalculator)getObject("Calculator"); System.out.println("6+7=" + calc.add(6, 7)); } catch(Exception e) { System.err.println(e.getMessage()); e.printStackTrace(); } public static void main(String args[]) { new ClassClient().performTask(); } } Netzwerkprogrammierung 98

99 Java Socket Programmierung Fragen: Welche Vorteile sehen Sie im dynamischen Laden von Klassen? Welche Nachteile können entstehen wenn die Bezugsquelle unbekannt ist? Netzwerkprogrammierung 99

100 Java Socket Programmierung Zusammenfassung: Java Klassen über das Netzwerk dynamisch übertragen ObjectInputStream und ObjectOutputStream kennen gelernt Kann aber nicht mit nicht Java Programmen kombiniert werden Netzwerkprogrammierung 100

101 Übungsaufgabe 3 Entwickeln Sie eine Java-Anwendung die mit Hilfe von NetClassLoader eine Arbeiterklasse von einem Server holt, eine Instanz dieser Klasse abarbeitet und das Arbeitsergebnis zum Server zurücksendet. Ziel: Verteilte Aufgabenverarbeitung – wie zum Beispiel beim SETI Projekt Netzwerkprogrammierung 101

102 Übungsaufgabe 3 Beispiel für eine Arbeiterklasse: Durch das Sieb des Eratosthenes kann man schnell Primzahlen finden: Man füllt eine Liste mit Zahlen von 1 bis S (z.B. S=10000) n sei eine Variable man beginnt mit n=2 und sucht nun alle Vielfachen von n alle gefundenen Vielfachen werden aus der Liste gestrichen nun wird n auf die kleinste verbleibende Zahl gesetzt nach dem letzten n (im ersten Fall n=3) man sucht wieder alle Vielfachen von n und streicht dieser aus der Liste … ist n*n >= S kann der Algorithmus beendet werden Alle verbleibenden Zahlen in der Liste sind Primzahlen Netzwerkprogrammierung 102

103 RMI RMI (Remote Methode Invocation) Java-Technologie Objekte auf einem entfernten Rechner werden verwendet wie lokale Eignet sich auch zur IPC (Inter-Process Communication) von Anwendungen auf dem selben Rechner Netzwerkprogrammierung 103

104 RMI Netzwerkprogrammierung 104

105 RMI Netzwerkprogrammierung 105

106 RMI Netzwerkprogrammierung 106 RemoteServerObject

107 RMI Netzwerkprogrammierung 107 RMI – Registry kennt alle Remote Server Objekte und ist Vermittler (Telefonbuch)

108 RMI verwenden 1. Interface für RemoteObject Klasse definieren 2. Implementation des RemoteObjects entsprechend des Interfaces 3. Server Programm, welches das RemoteObject an die RMI-Registry bindet 4. Client Programm entwickeln, welches das Interface verwendet und von der RMI-Registry des Serverechners das RemoteObject holt 5. rmiregistry auf dem Server starten, rmic auf die Serverklasse anwenden, Server starten Netzwerkprogrammierung 108

109 RMI verwenden Netzwerkprogrammierung 109

110 RMI verwenden Server: Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); Registry registry = LocateRegistry.getRegistry(); // Registry registry = LocateRegistry.createRegistry(7777); registry.bind("Hello", stub); // registry.rebind(Hello", stub); Client: Registry registry = LocateRegistry.getRegistry(" "); Hello stub = (Hello) registry.lookup("Hello"); // Hello stub = (Hello )Naming.lookup("//hostname:port/Hello"); Netzwerkprogrammierung 110

111 RMI verwenden Netzwerkprogrammierung 111

112 Beispiel: Internet Shopping Ein Shopping Portal mit Java Programm Das Beispiel wird mit Hilfe von zwei Server-Objekten implementiert: Ein zentrales Server-Objekt, das eingehende Verbindungen entgegennimmt und dafür zuständig ist, neue Sitzungen zu erzeugen. Ein Warenkorb-Objekt für die Clients. Die Daten im Warenkorb werden von Client-Seite hinzugefügt und auf dem Server im Warenkorb zwischengespeichert. Netzwerkprogrammierung 112

113 Beispiel: Internet Shopping Zunächst Interfaces anlegen Die Schnittstelle des zentralen Server-Objekts hat dabei folgenden Aufbau: import java.rmi.*; public interface ShopServer extends Remote { public Cart createCart() throws RemoteException; } Netzwerkprogrammierung 113

114 Beispiel: Internet Shopping Der Client ruft die Methode createCart() und bekommt ein Cart-Objekt zurück. Da der Inhalt des Warenkorbs auf dem Server gespeichert werden soll, bekommt er auch ein Interface: import java.rmi.*; public interface Cart extends Remote { public void addProduct(String name) throws RemoteException; public void removeProduct(String name) throws RemoteException; public String[] listContents() throws RemoteException; public void buy(String custID) throws RemoteException; } Netzwerkprogrammierung 114

115 Beispiel: Internet Shopping Man kann dem Warenkorb neue Produkte hinzufügen, Produkte entfernen, die vorhandenen Produkte auflisten und die Bestellung absenden. Zur Vereinfachung werden die Produkte hier nur durch ihren Namen identifiziert. (normalerweise eine eigene Klasse Produkt) Netzwerkprogrammierung 115

116 Beispiel: Internet Shopping Das zentrale Server-Objekt ist in ShopServerImpl implementiert. Besitzt eine main()-Methode, in der das Objekt beim Namensdienst registriert wird. import java.rmi.*; import java.rmi.server.UnicastRemoteObject; public class ShopServerImpl extends UnicastRemoteObject implements ShopServer { public ShopServerImpl() throws RemoteException { } public Cart createCart() throws RemoteException { System.out.println("create cart"); return new CartImpl(); } public static void main(String args[]) { try { Naming.rebind("shop-server", new ShopServerImpl()); } catch(Exception ex) { ex.printStackTrace(); } } } Netzwerkprogrammierung 116

117 Beispiel: Internet Shopping Beim Aufruf von createCart() wird ein neues Cart-Objekt zurückgegeben. Implementierung in CartImpl Jeder User bekommt einen eigenen Einkaufswagen Netzwerkprogrammierung 117

118 Beispiel: Internet Shopping import java.rmi.server.UnicastRemoteObject; import java.rmi.RemoteException; import java.util.*; public class CartImpl extends UnicastRemoteObject implements Cart { List products; boolean pending = false; public CartImpl() throws RemoteException { products = new ArrayList(); } public void addProduct(String name) { System.out.println("add product: "+name); products.add(name); } Netzwerkprogrammierung 118

119 Beispiel: Internet Shopping public void removeProduct(String name) { System.out.println("remove product: "+name); products.remove(name); } public String[] listContents() { System.out.println("list contents"); String[] contents = new String[products.size()]; products.toArray(contents); return contents; } public void buy(String custID) { System.out.println("buy products: "+custID); pending = false; // Hier Bestellung verschicken... } Netzwerkprogrammierung 119

120 Beispiel: Internet Shopping Wenn eine Server-Methode ein Objekt zurückgibt, das von UnicastRemoteObject erbt, wird nicht das Objekt serialisiert sondern es wird auf dem Server ein neues Remote-Objekt erzeugt wenn der Client Methoden von Cart aufruft, werden diese Methoden auf Serverseite ausgeführt. Netzwerkprogrammierung 120

121 Beispiel: Internet Shopping import java.rmi.Naming; public class ShopClient { public static void main(String args[]) { try { ShopServer server = (ShopServer)Naming.lookup("ShopServer"); Cart cart = server.createCart(); cart.addProduct("Visual Studio 2005"); cart.addProduct("Oracle Database"); String[] s = cart.listContents(); for(int i=0; i < s.length; i++) System.out.println(" - "+s[i]); cart.buy("Max Mustermann"); } catch(Exception ex) { ex.printStackTrace(); } } } Netzwerkprogrammierung 121

122 Beispiel: Internet Shopping Fragen: Warum bleibt der Einkaufskorb auf dem Server? Wie sieht die typische Datenanbindung einer solchen Anwendung aus? Netzwerkprogrammierung 122

123 RMI verwenden Vorteile gegenüber herkömmlicher Socketprogrammierung: Minimale (technische Netzwerk-) Kenntnisse nötig Transparent – als Entwickler sehen wir die gesamte Übertragung nicht (Abstraktion) Fernsteuerung eines Serverprogramms anstatt reines Austauschen von Daten Netzwerkprogrammierung 123

124 RMI verwenden Nachteile: RMI-Registry muss mitlaufen (eigener Prozess mit eigenem Port) Die Datenübertragung erzeugt mehr Overhead RMI ist nur mit der Programmiersprache Java verwendbar Netzwerkprogrammierung 124

125 RMI verwenden Fragen: Man kann bei mehreren Server Programmen sowohl eine gemeinsame RMI-Registry verwenden, als auch jeweils eine eigene. Welche vorteile sehen Sie in beiden Lösungen? Netzwerkprogrammierung 125

126 RMI verwenden Zusammenfassung: RMI Architektur kennen gelernt RMI-Registry und RMIC verwendet Unterschied zwischen herkömmlicher Socketprogrammierung und RMI aufgezeigt Netzwerkprogrammierung 126

127 Übungsaufgabe 4 Ein kleines DBMS auf der Basis von RMI Folgende Punkte soll der Server berücksichtigen: Er implementiert einen ADT Person, mit den wichtigsten Eigenschaften, wie ID Name Vorname Geburtsdatum etc. Weiterhin implementiert er einen Vector, welcher mit n vielen Personen gefüllt ist. Der Vector soll den Namen personenVector tragen. personenVector soll serverseitig in eine binäre Datei serialisiert werden. Verwenden Sie hierfür ObjectOutputStream bzw. ObjectInputStream und java.io.Serializable. Netzwerkprogrammierung 127

128 Übungsaufgabe 4 Er soll in einer Klasse DBServer, folgende Methoden anbieten: Person getPerson(int id) Person[] getPersonByName(String name) Person[] getPersonByVorname(String vorname) void setPerson(Person p) void removePerson(Person p) Der Client soll sich ein Objekt vom Typ DBServer verwenden und aus diesem verschiedene Personen aufrufen/setzen/löschen können. Netzwerkprogrammierung 128

129 .NET Remoting.NET bietet im wesentlichen zwei Konzepte für Netzwerkprogrammierung: System.Runtime.Remoting High Level Sprachelemente für RPC / Remote Objects Wahlweise über BinaryTCP oder HTTP-SOAP (XML) System.Net.Sockets Low Level Sprachelemente Sockets wie wir schon mit Java hatten Netzwerkprogrammierung 129

130 .NET Remoting Ein Objekt wird vom Server für alle Clients zur Verfügung gestellt Clients können das Objekt fernsteuern Direkt vergleichbar mit RMI Netzwerkprogrammierung 130

131 .NET Remoting Verwendung von 3 Projektmappen in VS 1 Server Programm 1 Client Programm 1 gemeinsam genutzte Klassen-Bibliothek Netzwerkprogrammierung 131

132 .NET Remoting Netzwerkprogrammierung 132 Alle Klassen müssen von MarshalByRefObject erben um RemoteObjekte zu sein public class MyServerObject : MarshalByRefObject { private int Usercount; public int GetUsercount() { return Usercount; } public void IncrementUsercount() { Usercount++; System.Console.WriteLine("Usercount ist nun: " + Usercount); } public void DecrementUsercount() { Usercount--; System.Console.WriteLine("Usercount ist nun: " + Usercount); }

133 .NET Remoting Netzwerkprogrammierung 133 Bibliotheken einbinden http Channel auf Port 8880 öffnen http Server wieder schließen static void Main(string[] args) { HttpChannel channel = new HttpChannel(8880); // Port ChannelServices.RegisterChannel(channel, false); // Server über port 8880 ist hier offen RemoteObjects.MyServerObject server = new RemoteObjects.MyServerObject(); RemotingServices.Marshal(server, "server"); System.Console.WriteLine("Server gestartet..."); System.Console.ReadLine(); // warte auf Taste zum beenden ChannelServices.UnregisterChannel(channel) ; }

134 .NET Remoting Netzwerkprogrammierung 134 Arbeiten wie lokales Objekt static void Main(string[] args) { RemoteObjects.MyServerObject server = (RemoteObjects.MyServerObject) Activator.GetObject (typeof(RemoteObjects.MyServerObject), "http:// :8880/server"); // Zugriff auf das Server Objekt server.IncrementUsercount(); System.Console.WriteLine("Du bist der " + server.GetUsercount() + " User"); System.Console.ReadLine(); // warte auf Taste zum beenden server.DecrementUsercount(); }

135 .NET Remoting Netzwerkprogrammierung 135

136 .NET Remoting Methoden werden auf dem Server ausgeführt Über einen Channel können beliebig viele Objekte registriert werden (ähnlich der RMI- Registry) TcpChannel ist binär (weniger Overhead als SOAP) EventHandler für Kommunikation zwischen Klassenbibliothek und Programmen Netzwerkprogrammierung 136

137 .NET Remoting Netzwerkprogrammierung 137 wenn Handler festgelegt wurde dann ausführen

138 .NET Remoting Netzwerkprogrammierung 138

139 .NET Remoting Vergleich.NET Remoting zu RMI Wenn das SOAP Protokoll verwendet wird, theoretisch auch mit Programmen anderer Programmiersprachen koppelbar RMI-Registry hier prinzipiell kein extra Programm Bleibt vorwiegend auf Windows BS beschränkt Netzwerkprogrammierung 139

140 RMI und.NET Remoting Beide Konzepte sind sehr ähnlich Beide haben den Nachteil: Der Server kann selbständig keine Nachrichten zum Client senden! Client stößt Methode auf Server an und bekommt Ergebnis zurück Netzwerkprogrammierung 140

141 RMI und.NET Remoting Netzwerkprogrammierung 141

142 RMI und.NET Remoting Netzwerkprogrammierung 142 gedachtes Ergebnis:

143 RMI und.NET Remoting Der so genannte Callback: Server kann zu einem beliebigen Zeitpunkt den Client über Ereignisse informieren Beispiel: Auktionshaus: Alle Clients können Gebote abgeben Clients sollen stets das höchstgebot angezeigt bekommen Netzwerkprogrammierung 143

144 RMI und.NET Remoting Netzwerkprogrammierung 144

145 RMI und.NET Remoting Realisierung von Callbacks: Client wird selbst zu einem Server und stellt RemoteObject bereit Client meldet sich am Server an (wie immer) Client teilt Server mit wie man ihn zurückrufen kann Server führt Liste über alle Clients Netzwerkprogrammierung 145

146 RMI und.NET Remoting Fragen: Welche Nachteile ergeben sich durch den Einsatz von Callbacks? (Bezug Firewalls, NATs) Netzwerkprogrammierung 146

147 Übungsaufgabe 5 Entwickeln Sie eine RMI oder.NET Remoting Anwendung mit Callbacks Auktionshaus mit n Teilnehmern und mehreren Artikeln Client sollte kleine GUI besitzen in der Gebote abgegeben werden können und Artikel angesehen/ausgewählt werden können Prüfung ob ein abgegebenes Gebot > aktuelles Höchstgebot ist Netzwerkprogrammierung 147

148 Problem In der realen Welt werden verschiedenste Technologien zusammen verwendet (Java, RMI,.NET …) Sockets arbeiten gut zusammen auch mit unterschiedlichen System aber sind schwer zu entwickeln (aufwendig). wir benötigen etwas unabhängiges und leistungsstarkes Netzwerkprogrammierung 148

149 WebServices Eine Lösung: WebServices Jeder Betreiber stellt Services bereit Clients greifen auf diese zu Beispiel: Google sucht für uns im Internet Verwenden von Google WebService um in einem eigenen Projekten Google-Suche anbieten zu könne. Netzwerkprogrammierung 149

150 WebServices Alternative zu RMI und.NET Remoting Plattformunabhängig Sprachunabhängig (Perl,Java,C++,.NET,PHP,…) Beispiele: Google, Amazon,.NET Passport Auf HTTP (Web-Server) aufgesetzt, damit kein zusätzlicher Port nötig, gut erreichbar auch hinter Firewalls Webservices sind in der Regel zustandslos Netzwerkprogrammierung 150

151 WebServices Fragen: Welche Vorteile bietet WebServer als Träger noch? Kann es dadurch auch Nachteile/Probleme geben? Netzwerkprogrammierung 151

152 WebServices Ziel: Nachrichten zwischen Client und Server können von allen Plattformen und Programmiersprachen gelesen/geschrieben werden! Vision: Alle Server der Welt bieten Services an und wie in einem Telefonbuch können die Clients diese verwenden Netzwerkprogrammierung 152

153 WebServices Netzwerkprogrammierung 153

154 WebServices Netzwerkprogrammierung 154

155 WebService Woher weiß der Client wo ein Server steht und welche WebServices er anbietet? Netzwerkprogrammierung 155 UDDIServerClient Dienst finden Dienst bekanntgeben

156 WebService Wie kann man nun die angebotenen Dienste beschreiben? public String[] doGoogleSearch (String s) { … } Netzwerkprogrammierung 156 Wie soll dies ein Scheme Program verstehen?

157 WebService WSDL XML-Sprache zur Selbstbeschreibung von WebServices WSDL Beispiel: CreditCard WS - was halten Sie davon? Netzwerkprogrammierung 157

158 WebService Mit WSDL wird der Aufbau von Methoden und deren Parametern beschrieben. Spezifische Angaben über Art, Menge … Primitive Datentypen wie String, Integer, Array … müssen vereinheitlicht werden ! Netzwerkprogrammierung 158

159 WebService SOAP (Simple Object Access Protocol) XML basierte Sprache um Nachrichten auszutauschen (Client Server) SOAP wird in der Regel durch WS-Kit erstellt und ausgewertet Ursprünglich von MS Entwickelt für XML-RPC.NET Remoting kann SOAP Netzwerkprogrammierung 159

160 WebServices Google Suchanfrage stellen mit SOAP Nachricht: das hier sind die Schlüsselworte 0 10 true false latin1 Netzwerkprogrammierung 160

161 WebServices Aus einer WSDL Datei kann man sich automatisch eine Proxy-Klasse erzeugen lassen (.NET, Java). Auch Internetseiten können automatisch generiert werden (zum gerade entwickelten WS) Beispiel mit.NET Netzwerkprogrammierung 161

162 WebService Selbst einen WS entwickeln und anbieten: Eine eigene Klasse erbt von einer Basis- Webservice Klasse (System.Web.Services.WebService in.NET) Diese Klasse = WS Klasse die wir im Client mit …WS w = new …WS(); instanziieren. Entwicklung von Methoden wie immer Kennzeichnen der Methoden die von außen verfügbar sein sollen ([WebMethod] in.NET) Netzwerkprogrammierung 162

163 WebService WebServices benötigen einen WebServer (in der Regel) Damit eher ungeeignet für IPC (Inter Process Communication) Entwicklung und Setup von WS ist ja nach Sprache und BS leicht unterschiedlich Netzwerkprogrammierung 163

164 WebServices Nachteile: Großer Daten Overhead XML Parsen verbraucht Zeit Es gibt derzeit kein einheitliches Modell zur Authentifizierung eines Clients Beispiele: Google-Key oder.htaccess (Beschränkung wie eine normale HTML Seite) Google hat am seinen WebService wieder eingestellt (es werden keine neuen Keys mehr vergeben) Netzwerkprogrammierung 164

165 WebServices Fragen: Welche Vorteile entstehen durch den Einsatz von Webservices im Internet? Kann man Callbacks verwenden? Welche Probleme kommen besonders zum tragen, wenn SOA (Service Oriented Architecture) eingesetzt wird (viele Webservices für unterschiedliche Aufgaben)? Netzwerkprogrammierung 165

166 WebServices Zusammenfassung: Sowohl WebServices, RMI und.NET Remoting besitzen einen sehr ähnlichen Grundkonzept Mit steigender Abstraktion entsteht mehr Overhead langsamer, mehr unerwünschte Datenübertragung Netzwerkprogrammierung 166

167 Beleg - Projekte Entwickeln Sie eine Client-Server Projekt welches eines oder mehrere der vorgestellten Konzepte (Sockets, RMI, Remoting, WS,…) verwendet. Netzwerkprogrammierung 167

168 Beleg – Projekte Ideen Sockets: Client alla Outlook (vereinfacht) FTP Client oder Server Chat Applet & Server … RMI /.NET Remoting Schach Applikation Diverse Kartenspiele … Netzwerkprogrammierung 168

169 Beleg – Projekte Ideen WS: Warenhaus Artikelsuche (mit DB und vielleicht Hibernate, …) Einheiten-Umwandler-Service ( $, m cm…) Verschlüsslungsservice (Text Crypted) ChartService (Wertliste Chart-Grafik) - Rückgabe ist ByteArray für JPEG Bild o.ä. … Netzwerkprogrammierung 169

170 Beleg – Projekte Ideen Stellen Sie mir ihr Projekt vor (welchen Inhalt soll es haben, wie wollen Sie es umsetzen) Diskussion Netzwerkprogrammierung 170

171 Java Applets Java Programme die nur in einer abgeschlossenen Laufzeitumgebung arbeiten (z.B.:Web-Browser, Appletviewer) Ein Applet wird häufig in eine Website eingebettet Programmcode wird aus dem Internet geladen und auf dem lokalen Rechner ausgeführt Netzwerkprogrammierung 171

172 Java Applets Sandbox-Prinzip in Analogie zu einem Kind, das in seinem Sandkasten keinen Schaden anrichten kann Der Zugriff auf die Umgebung wird durch ein spezielles Objekt, den Sicherheitsmanager, gesteuert Der Sicherheitsmanager, wird bei der Initialisierung der JVM festgelegt - Applet kann nichts ändern Verboten: Zugriffe auf das Dateisystem des lokalen Rechners Zugriff auf Daten des Benutzers (Nutzername, Zwischenablage etc.) Netzwerkverbindungen zu anderen Rechnern als dem Server, von dem das Applet geladen wurde Starten von Programmen Änderung der Sicherheitseinstellungen Netzwerkprogrammierung 172

173 Java Applets Applets besitzen keine main Methode aber dafür: init() - wird genau einmal aufgerufen, wenn das Applet erstmals in den Browser geladen wird. start() - wird jedes Mal aufgerufen, wenn das Applet sichtbar wird. stop() - wird jedes Mal aufgerufen, wenn das Applet verdeckt wird, z. B. weil das Browser-Fenster von einem anderen Fenster überdeckt wird. (klappt aber nicht immer so wie soll!) destroy() - wird aufgerufen, wenn das Applet aus dem Hauptspeicher entladen wird. Netzwerkprogrammierung 173

174 Java Applets Netzwerkprogrammierung 174 Blau = einmalig Grün = kann mehrmals auftreten

175 Java Applets Wichtig: Applets werden in der Regel NIE zerstört solange der betreffende Browser läuft! stop() verwenden um Resourcen freizugeben Applets in HTML Seiten einbinden: Netzwerkprogrammierung 175

176 Java Applets Netzwerkprogrammierung 176 SELFHTML Beispiel

177 Java Applets Applet kann neben Grafikspielereinen aber auch Frontend für eine echte Anwendung sein Oft liegt Datenbank auf dem Server und Kommunikation mit Applet ist notwendig RMI / Sockets können verwendet werden, um Applet mit einer Server-Applikation zu verbinden Netzwerkprogrammierung 177

178 Java Applets Hinweise zur Entwicklung von Applets: IDE wie NetBeans eignet sich gut zur Entwicklung Appletviewer (als Testwerkzeug) Browser Cache bei Applets beachten! Internet Explorer (Java-Konsole verwenden – X für Cache leeren!) FireFox muss neu gestartet werden um Cache zu leeren. Netzwerkprogrammierung 178

179 Java Applets import java.applet.*; import java.awt.Graphics; import java.awt.Font; public class HalloApplet extends Applet { Font f; public void init() { String Schriftart = getParameter("Font"); f = new Font(Schriftart, Font.BOLD, 18); System.out.println("Java-Konsole: init... !"); } public void paint(Graphics g) { g.setFont(f); g.drawString("Hallo Welt!", 50, 25); System.out.println("Java-Konsole: paint... !"); } public void stop() { System.out.println("Java-Konsole: stop... !"); } Netzwerkprogrammierung 179

180 Java Applets Applets in JAR Archiven verpacken Mehrere Dateien können in ein Archive (wie ZIP) verpackt werden Im Web muss dann nur eine Datei heruntergeladen werden (wird auf dem Client entpackt) JAR Archive können signiert werden Netzwerkprogrammierung 180

181 Java Applets JAR Archive erzeugen jar cvf AppletArchive.jar *.class Ein Archive erstellen und alle Class-Files im aktuellen Ordner einbinden Es können aber auch alle anderen Dateien (Bilder, HTML Dateien,…) eingebunden werden Netzwerkprogrammierung 181

182 Java Applets Applet in Webseite mit Archive einbinden: Netzwerkprogrammierung 182

183 Java Applets Wichtige Informationen innerhalb des Applets abrufen: String p1 = getParameter ("param1"); liest einen Applet Parameter der über HTML übergeben wurde ein java.net.URL db = getDocumentBase(); Gibt die URL des HTML Dokuments zurück in dem das Applet eingebettet ist. Image whiteBoard = getImage (db, "White.jpg"); Ein Bild relativ zum HTML Dokument ins Applet laden Netzwerkprogrammierung 183

184 Java Applets Fragen: Macht es Sinn, große Anwendungen in Applets über den Browser zu verwenden? (bezüglich Dateigröße, Aktualität der Programmversion,…) Könnte unser NetClassLoader unter Umständen Problemen entgegenwirken? Netzwerkprogrammierung 184

185 Java Applets Zusammenfassung: Die meisten Java Anwendungen können mit wenig Aufwand in Applets umstrukturiert werden Inhalt der main() Methode dafür in die init() Signierte Applets bieten derzeit den größten Leistungsumfang (mehr als Flash) Netzwerkprogrammierung 185

186 Java Webstart Technologie um Java-Anwendungen direkt über das Internet zu installieren und auszuführen. Kern ist das JNLP (Java Network Launching Protocol) ~ Intstallationsbeschreibungssprache Netzwerkprogrammierung 186

187 Java Webstart Vorteile von Webstart: Keine Konfiguration vom Anwender nötig Keine typische Installation mit Zielverzeichnis, Full, Medium, Small oder ähnlichem Bei einer neuen Programmversion (auf dem Server) wird beim nächsten Programmstart (Anwender) automatisches Update durchgeführt Netzwerkprogrammierung 187

188 Java Webstart Unterschied zu Applets: Applet wird im Browser ausgeführt (WebStart Applikation wird heruntergeladen und bleibt auf Anwender-PC) Browser ist nur zum Auffinden Netzwerkprogrammierung 188

189 Java Webstart Voraussetzungen (Server): Web-Server (z.B.: Apache) MIME Type muss gesetzt sein Programm muss in JAR Dateien verpackt sein Voraussetzungen (Client): Java JRE muss installiert sein (1.3+) Internet Browser (IE, FireFox,…) Netzwerkprogrammierung 189

190 Java Webstart Schritt 1: Anwendung entwickeln Schritt 2: In JAR Datei Verpacken Schritt 3: MIME Type im WebServer setzen Schritt 4: JAR Dateien in HTDOCS (Web-Root) kopieren Schritt 5: JNLP Datei anlegen (XML) Netzwerkprogrammierung 190

191 Java Webstart Aufruf aus einer HTML Seite über: Anwendung Starten Sandbox: Auch WebStart Applikationen laufen im Sandboxmodus – mit signed JARs auch volle Rechte möglich Netzwerkprogrammierung 191

192 Java Webstart Beispiel mit NetBeans und Apache: Einfache Fensteranwendung NetBeans anweisen eine JAR Datei für das Projekt anzulegen Apache Server konfigurieren: Apache/conf/mime.types editieren application/x-java-jnlp-filejnlp einfügen JNLP Datei erstellen und mit JARs zusammen in einen Ordner legen im Apache HTDOCS. Netzwerkprogrammierung 192

193 Java Webstart JNLP Datei Beispiel: Demo Wir Unser Demo Programm … Netzwerkprogrammierung 193

194 Java Webstart JNLP Datei Beispiel: … Netzwerkprogrammierung 194

195 Java Webstart JNLP API Funktionen für OpenDialog, SaveDialog, PrintDialog,… auch in nicht signierten JARs Wenn nur diese Funktionalität benötigt wird deutlich sicherer als signiertes JAR Benötigt jnlp.jar als Bibliothek (API Referenz)API Referenz Netzwerkprogrammierung 195

196 Übungsaufgabe 6 Verwenden Sie das DBMS aus Übung 4 und entwickeln Sie ein Java-Applet als Client Der Server bleibt dabei unverändert Verwenden Sie das nachfolgende Tutorials um ihr Java- Applet in ein JAR zu verpacken und selbst zu signieren: applet/signed-applet.html applet/signed-applet.html Signed/ Signed/ Netzwerkprogrammierung 196

197 .NET im Browser Früher ActiveX heute.NET Ermöglicht es genau wie bei Applets Anwendungen über Browser auszuführen Sandbox-Modus wie bei Applets Keine besondere Appletklasse von der abgeleitet werden muss läuft nur im Internet Explorer und nur bei installiertem.NET Framework Netzwerkprogrammierung 197

198 .NET im Browser Netzwerkprogrammierung 198

199 .NET im Browser Netzwerkprogrammierung 199

200 .NET im Browser VS erzeugt eine DLL bei Kompilation Einbinden in HTML Seite über: Netzwerkprogrammierung 200

201 .NET im Browser Einbindung funktioniert leider nicht lokal DLL muss auf einen Webserver gelegt werden Vorzugsweise IIS, Apache kann auch dazu konfiguriert werden Netzwerkprogrammierung 201

202 .NET im Browser Zusammenfassung: Konzept nahezu identisch mit Java-Applets Nicht plattformunabhängig (eventuell mit Mono unter Linux) Sprachunabhängig, sowohl J#, C#, VB# eignen sich zur Entwicklung Netzwerkprogrammierung 202

203 Serverseitige Programmierung Applets und.NET Browserprogramme werden auf dem Client ausgeführt Bestimmte Aufgaben kann der Client jedoch alleine nicht lösen (Datenbank, dynamische Generierung von Dokumenten, …) Wenn nur wenige Daten vom Server benötigt werden, dann Applet sinnvoll Wenn sehr viele Daten vom Server verarbeitet werden müssen, dann lieber gleich serverseitige Anwendung verwenden und thin-Client Netzwerkprogrammierung 203

204 Serverseitige Programmierung Der Server Keine zusammenhängende Abarbeitung Requests müssten zugeordnet werden Speicherobjekte gehen ohne explizite Sicherung nach jedem Response verloren Vor jeder Requestverarbeitung müssen vorangehende Speicherobjekte wiederhergestellt werden

205 Java Servlets Das Java Konzept für dynamische Webseitengenerierung auf Serverseite Servlet = Java Klasse in einem J2EE Webserver Servlet-Container (z.B.: Tomcat) läuft. Ein Servlet ist prinzipiell vergleichbar mit einem WebService nur ohne SOAP Methoden doGet(…) und doPost(…) werden aufgerufen wenn eine Anforderung eintrifft Netzwerkprogrammierung 205

206 Quelle: Wikipedia Netzwerkprogrammierung 206

207 Rückblick auf HTTP und Webserver mit Sockets Request Header Welche Datei soll vom Server abgerufen werden Cookies im Header Browsertyp … Response Header Status Code (200,404,403…) Content-Type (text/html, image/jpeg,…) Daten (HTML Seite, Bild…) Netzwerkprogrammierung 207

208 Netzwerkprogrammierung 208

209 Java Servlet Beispiel public class NewServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println(" Servlet NewServlet "); out.println(" "); out.println(" Servlet NewServlet at " + request.getContextPath () + " "); out.println(" "); out.close(); } Netzwerkprogrammierung 209

210 Java Servlet Beispiel public class ImageCreator extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("image/jpeg"); ServletOutputStream out = response.getOutputStream(); // JPEG Bild erzeugen BufferedImage bi = new BufferedImage(300, 150, BufferedImage.TYPE_INT_RGB); Graphics2D big = bi.createGraphics(); big.drawString("Generarted Image",10,20); big.drawString((new Date()).toString(),10,50); ByteArrayOutputStream o = new ByteArrayOutputStream(); try { JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(o); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi); param.setQuality(1.0f, false); encoder.setJPEGEncodeParam(param); encoder.encode(bi); } catch (Exception ex) { ex.printStackTrace(); } out.write(o.toByteArray()); out.close(); } Netzwerkprogrammierung 210

211 Java Server Pages Einige Servlets erzeugen pure HTML Ausgabe und haben nur kleine Code Elemente eingebettet. Hierfür eignet sich JSP (Java Server Page) Netzwerkprogrammierung 211

212 Java Server Pages Arbeitsweise für den Entwickler wie PHP Programmcode wird in eine HTML Seite eingebettet (Endung.jsp) JSP wird im Hintergrund in ein Servlet übersetzt welches mit println() die HTML Teile ausgibt. Netzwerkprogrammierung 212

213 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 213

214 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 214

215 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 215

216 Servlet / JSP Entwicklung mit NetBeans Bei Ausführung startet ein Browser: Netzwerkprogrammierung 216

217 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 217

218 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 218

219 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 219

220 Servlet / JSP Entwicklung mit NetBeans Netzwerkprogrammierung 220

221 Servlet / JSP Entwicklung mit NetBeans Fragen: Welche Vorteile besitzt eine serverseitige Lösung gegenüber einer clientseitigen, bezüglich der Datensicherheit? (z.B.: Applet verbindet sich direkt mit Datenbank auf dem Server) Welche Anforderungen haben serverseitige Lösungen an den Client? Welchen Nachteile haben serverseitige Programme? Netzwerkprogrammierung 221

222 Servlet / JSP Sessionmanagement wie WebServices sind Servlets von Haus aus zustandslos In Webapplikationen ist es aber fast immer nötig zu wissen, welcher Client gerade eine Anfrage sendet (zum Beispiel Internet-Shopping) Session-Management nötig ! Netzwerkprogrammierung 222

223 Servlet / JSP Sessionmanagement public class LoginServlet extends HttpServlet { protected void processRequest(…) throws … { String user = request.getParameter("user"); String pass = request.getParameter("pass"); // Passwort & Benutzernamen überprüfen würde hier passieren HttpSession s = request.getSession(true); s.setAttribute("username",user); response.sendRedirect("index.jsp"); } Netzwerkprogrammierung 223

224 Übungsaufgabe 7 Verwenden Sie NetBeans IDE und erstellen Sie eine dynamische Webseite mit JSP Dabei soll auch ein Formular vorhanden sein (mit Eingabefeldern) Erstellen Sie ein Servlet, welches die Eingegebenen Werte des Formulars verarbeitet Servlet soll ein Ergebnis seiner Verarbeitung zurückliefern Hinweis: Sie benötigen im Servlet: request.getParameter("EingabefeldName"); Netzwerkprogrammierung 224

225 Übungsaufgabe 7 Ein Beispiel: Netzwerkprogrammierung 225

226 ASP.NET.NET Variante von Java Servlets/JSP Teilung von HTML (ASP Seite) und Quelltext (Code-Behind) in einer.NET Sprache wie C# Seitenelemente sind Objekte (Textfelder, Buttons,…) – keine einfachen HTML Elemente mehr Java hat dieses Konzept wieder kopiert und nennt es Java Server Faces Framework Netzwerkprogrammierung 226

227 ASP.NET Request und Response Objekte genau wie in Java Sessionkonzept ist nahezu identisch umgesetzt wie in Java Vorteile von.NET wie Schnelles einbinden von WebServices XML DOM … Nachteile Nur IIS (Windows WebServer) Netzwerkprogrammierung 227

228 ASP.NET - Beispiel Login Seite geschützte Seite die Login erfordert Netzwerkprogrammierung 228

229 Zusammenfassung Auch auf Serverseite sind die Konzepte zwischen Java und.NET sehr ähnlich. In der Realität werden alle besprochenen Technologien sehr heterogen eingesetzt. Webapplikationen bieten viel Potential doch auch herkömmliche Client/Server Anwendungen werden relevant bleiben. Aber auch low-Level Netzwerkprogrammierung bleibt wichtig! Sie sollten mit allen Technologien vertraut sein Netzwerkprogrammierung 229


Herunterladen ppt "Netzwerk- programmierung Sommersemester 2007. Inhalt der LV Grundlegende Begriffe Konzepte des WWW HTML (DOM, JS, CSS, XHTML) HTTP Protokoll Socketprogrammierung."

Ähnliche Präsentationen


Google-Anzeigen