Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Netzwerk-programmierung

Ähnliche Präsentationen


Präsentation zum Thema: "Netzwerk-programmierung"—  Präsentation transkript:

1 Netzwerk-programmierung
Sommersemester 2007

2 Netzwerkprogrammierung
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
IP Paket – Header Dem Header folgt Datenbereich (z.B.: TCP Paket) z.B.: 0x06 für TCP oder 0x11 für UDP 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 und physikalische Adresse Unterkategorie von URI (Uniform Resource Identifier) URI bezieht alle Schemas ein (file:// mailto: file://) URL eigentlich nur 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
# Netzwerkprogrammierung

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

23 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

24 Netzwerkprogrammierung
Konzepte des WWW Aufbau eines HTML Dokuments: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " <html> <head> <title>Titel der Webseite</title> </head> <body> Inhalt der Webseite </body> </html> Netzwerkprogrammierung

25 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

26 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

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

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

29 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

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

31 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

32 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

33 Netzwerkprogrammierung

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

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

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

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.*; 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

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.*; 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

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.*; 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

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 <<<*"); _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 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

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

52 Sprachvergleich mit C++
#include <windows.h> #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

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

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

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

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

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

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

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

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

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:"); clientSocket.close(); catch (IOException ex){ System.out.println(ex);} Netzwerkprogrammierung

62 Socket Programmierung
Netzwerkprogrammierung

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

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

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

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

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

68 Socket Programmierung
Netzwerkprogrammierung

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

70 Socket Programmierung
Multicast Packet in eine Gruppe senden (2 Möglichkeiten): 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

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

72 Socket Programmierung
Beide Clients empfangen zeitgleich das Paket Netzwerkprogrammierung

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

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

75 Netzwerkprogrammierung
Ü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

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

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

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

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

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

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

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

83 Java Socket Programmierung
Der Class Loader ist dafür verantwortlich, alle verschiedenen Teile eines Programmes (Java-Klassen) zusammenzubringen, damit es ausführbar wird: Class Loader Bytecode seite 7,23,24 ist Java-Klasse java.* Packages werden(dürfen)nicht über's Netz geladen applikation: kann mehrere CL haben applet: security manager sorgt dafür, dass das applet keinen eigenen CL erstellen kann --> Gefahr der Umgehung des sicheren Ladeprozesses jvm merkt sich, welcher cl welche klasse geladen hat klassen unterschiedlicher applets sind getrennt keine kommunikation zwischen klassen, die von verschiedenen Hosts geladen wurden trusted progs untrusted progs JVM Internet Netzwerkprogrammierung

84 Java Socket Programmierung
Aufgaben: Laden,Trennen und Verwalten von Klassen Einteilung in sicher/unsicher Schutz der Java System-Klassen Anmerkungen: Verhindern von Überschreibung vertrauenswürdiger JVM-Klassen durch gleichnamige Klassen von einem Webserver Erzeugung konkreter Klassen erst nach dem Verifikationsprozess 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. 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 namespaces: sichtbarkeit eine klasse in einem namespace kann keine klasse in einem anderen namespace ansprechen! 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): Applikation Applet Primordial Class Loader namespaces: sichtbarkeit eine klasse in einem namespace kann keine klasse in einem anderen namespace ansprechen! ????? java.lang.ClassLoader java.security.SecureClassLoader java.net.URLClassLoader System-Klassen AppletClassLoader 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 seite 7 redundant? ...nein, nur class-file mit strings von bytes ...könnte manuell editiert werden --> potentielle gefahr --> verifikation nötig trennung: trusted <--> untrusted lokale klassen alles andere 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 Netzwerkprogrammierung

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

90 Java Socket Programmierung
Netzwerkprogrammierung

91 Java Socket Programmierung
Interface für Calculator: 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); } Netzwerkprogrammierung

92 Java Socket Programmierung
Die Klasse Calculator: 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)); } } Netzwerkprogrammierung

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

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

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

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

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

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

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

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

101 Netzwerkprogrammierung
Ü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

102 Netzwerkprogrammierung
Ü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

103 Netzwerkprogrammierung
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

104 Netzwerkprogrammierung
RMI Netzwerkprogrammierung

105 Netzwerkprogrammierung
RMI Netzwerkprogrammierung

106 Netzwerkprogrammierung
RMI RemoteServerObject Netzwerkprogrammierung

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

108 Netzwerkprogrammierung
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

109 Netzwerkprogrammierung
RMI verwenden Netzwerkprogrammierung

110 Netzwerkprogrammierung
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

111 Netzwerkprogrammierung
RMI verwenden Netzwerkprogrammierung

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

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

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

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

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

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

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

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

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

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

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

123 Netzwerkprogrammierung
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

124 Netzwerkprogrammierung
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

125 Netzwerkprogrammierung
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

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

127 Netzwerkprogrammierung
Ü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

128 Netzwerkprogrammierung
Ü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

129 Netzwerkprogrammierung
.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

130 Netzwerkprogrammierung
.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

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

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

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

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

135 Netzwerkprogrammierung
.NET Remoting Netzwerkprogrammierung

136 Netzwerkprogrammierung
.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

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

138 Netzwerkprogrammierung
.NET Remoting Netzwerkprogrammierung

139 Netzwerkprogrammierung
.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

140 Netzwerkprogrammierung
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

141 Netzwerkprogrammierung
RMI und .NET Remoting Netzwerkprogrammierung

142 Netzwerkprogrammierung
RMI und .NET Remoting gedachtes Ergebnis: Netzwerkprogrammierung

143 Netzwerkprogrammierung
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

144 Netzwerkprogrammierung
RMI und .NET Remoting Netzwerkprogrammierung

145 Netzwerkprogrammierung
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

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

147 Netzwerkprogrammierung
Ü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

148 Netzwerkprogrammierung
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

149 Netzwerkprogrammierung
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

150 Netzwerkprogrammierung
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

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

152 Netzwerkprogrammierung
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

153 Netzwerkprogrammierung
WebServices Netzwerkprogrammierung

154 Netzwerkprogrammierung
WebServices Netzwerkprogrammierung

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

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

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

158 Netzwerkprogrammierung
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

159 Netzwerkprogrammierung
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

160 Netzwerkprogrammierung
WebServices Google Suchanfrage stellen mit SOAP Nachricht: <SOAP-ENV:Body> <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch" SOAPENV:encodingStyle=" <keyxsi:type="xsd:string"> </key> <q xsi:type="xsd:string">das hier sind die Schlüsselworte</q> <start xsi:type="xsd:int">0</start> <maxResults xsi:type="xsd:int">10</maxResults> <filter xsi:type="xsd:boolean">true</filter> <restrict xsi:type="xsd:string" /> <safeSearch xsi:type="xsd:boolean">false</safeSearch> <lr xsi:type="xsd:string" /> <ie xsi:type="xsd:string">latin1</ie> <oe xsi:type="xsd:string">latin1</oe> </ns1:doGoogleSearch> </SOAP-ENV:Body> Netzwerkprogrammierung

161 Netzwerkprogrammierung
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

162 Netzwerkprogrammierung
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

163 Netzwerkprogrammierung
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

164 Netzwerkprogrammierung
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

165 Netzwerkprogrammierung
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

166 Netzwerkprogrammierung
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

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

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

169 Netzwerkprogrammierung
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

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

171 Netzwerkprogrammierung
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

172 Netzwerkprogrammierung
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

173 Netzwerkprogrammierung
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

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

175 Netzwerkprogrammierung
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: <applet code="Applet.class" width=300 height=400>     <param name="p1" value="param1">  </applet> Netzwerkprogrammierung

176 Netzwerkprogrammierung
Java Applets SELFHTML Beispiel Netzwerkprogrammierung

177 Netzwerkprogrammierung
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

178 Netzwerkprogrammierung
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

179 Netzwerkprogrammierung
Java Applets <APPLET CODE="HalloApplet.class" WIDTH="260" HEIGHT="40"> <PARAM name="Font" value="Arial"> </APPLET> 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

180 Netzwerkprogrammierung
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

181 Netzwerkprogrammierung
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

182 Netzwerkprogrammierung
Java Applets Applet in Webseite mit Archive einbinden: <APPLET ARCHIVE="Archiv.jar" CODE="HalloApplet.class" WIDTH="260" HEIGHT="40"> <PARAM name="Font" value="Arial"> </APPLET> Netzwerkprogrammierung

183 Netzwerkprogrammierung
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

184 Netzwerkprogrammierung
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

185 Netzwerkprogrammierung
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

186 Netzwerkprogrammierung
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

187 Netzwerkprogrammierung
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

188 Netzwerkprogrammierung
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

189 Netzwerkprogrammierung
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

190 Netzwerkprogrammierung
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

191 Netzwerkprogrammierung
Java Webstart Aufruf aus einer HTML Seite über: <a href="webstart.jnlp" >Anwendung Starten</a> Sandbox: Auch WebStart Applikationen laufen im Sandboxmodus – mit signed JARs auch volle Rechte möglich Netzwerkprogrammierung

192 Netzwerkprogrammierung
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-file jnlp  einfügen JNLP Datei erstellen und mit JARs zusammen in einen Ordner legen im Apache HTDOCS. Netzwerkprogrammierung

193 Netzwerkprogrammierung
Java Webstart JNLP Datei Beispiel: <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+“ codebase=" href="webstart.jnlp"> <information> <title>Demo</title> <vendor>Wir</vendor> <description>Unser Demo Programm</description> <homepage href=" <offline-allowed/> <shortcut online="false"> <desktop/> <menu submenu="Superdemos"/> </shortcut> </information> Netzwerkprogrammierung

194 Netzwerkprogrammierung
Java Webstart JNLP Datei Beispiel: <resources> <jar href="WebStart.jar"/> <jar href="lib/swing-layout-1.0.jar"/> <j2se version="1.4+" href=" /> </resources> <application-desc main-class="webstart.Form"/> </jnlp> Netzwerkprogrammierung

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

196 Netzwerkprogrammierung
Ü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: Netzwerkprogrammierung

197 Netzwerkprogrammierung
.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

198 Netzwerkprogrammierung
.NET im Browser Netzwerkprogrammierung

199 Netzwerkprogrammierung
.NET im Browser Netzwerkprogrammierung

200 Netzwerkprogrammierung
.NET im Browser VS erzeugt eine DLL bei Kompilation Einbinden in HTML Seite über: <html> <body> <object id="simpleControl1" classid=" height="338" width="744" VIEWASTEXT> </object> </body> </html> Netzwerkprogrammierung

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

202 Netzwerkprogrammierung
.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

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

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 Netzwerkprogrammierung
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

206 Netzwerkprogrammierung
Quelle: Wikipedia

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

208 Netzwerkprogrammierung

209 Netzwerkprogrammierung
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) protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Servlet NewServlet</title></head>"); out.println("<body>"); out.println("<h1>Servlet NewServlet at " + request.getContextPath () + "</h1>"); out.println("</body>"); out.println("</html>"); out.close(); } Netzwerkprogrammierung

210 Netzwerkprogrammierung
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

211 Netzwerkprogrammierung
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

212 Netzwerkprogrammierung
Java Server Pages Arbeitsweise für den Entwickler wie PHP Programmcode wird in eine HTML Seite eingebettet (Endung .jsp) <title> <% int v1 = 0; out.println("Der Wert der Variable: " + v1); %> </title> JSP wird im Hintergrund in ein Servlet übersetzt welches mit println() die HTML Teile ausgibt. Netzwerkprogrammierung

213 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

214 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

215 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

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

217 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

218 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

219 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

220 Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung

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

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

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

224 Netzwerkprogrammierung
Ü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

225 Netzwerkprogrammierung
Übungsaufgabe 7 Ein Beispiel: Netzwerkprogrammierung

226 Netzwerkprogrammierung
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

227 Netzwerkprogrammierung
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

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

229 Netzwerkprogrammierung
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


Herunterladen ppt "Netzwerk-programmierung"

Ähnliche Präsentationen


Google-Anzeigen