Netzwerk-programmierung
Sommersemester 2007
Inhalt der LV Grundlegende Begriffe Konzepte des WWW
HTML (DOM, JS, CSS, XHTML) HTTP Protokoll
Socketprogrammierung TCP Client/Server UDP / UDP Multicast
Java Socketprogrammierung Dynamisch Klassen über Netzwerke laden
Remote Technologien Java RMI .NET Remoting RMI und .NET Remoting Callbacks WebServices
Anwendungen im Web-Browser Java Applets .NET im Browser
Java Servlets und Java Server Pages (JSP)
Netzwerkprogrammierung 2
Grundlegende Begriffe
Computernetzwerke Ansammlung von Computern und anderen
Geräten, welche Informationen austauschen und bereitgestellte Dienste nutzen
Netzwerkprogrammierung 3
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
Grundlegende Begriffe
Mail Server
Datenbank Server
Drucker Server
Clients
Netzwerkprogrammierung 5
Client – Server Modell
Grundlegende Begriffe
NetzwerkkommunikationKommunikation beschrieben durch das
OSI Schichtenmodell Netzwerkorientiert Schicht 1-4 im OSI Anwendungsorientiert Schicht 5-7 im OSI
Netzwerkprogrammierung 6
Grundlegende Begriffe
OSI Referenzmodel - Zusammenbau des Pakets
Netzwerkprogrammierung 7
Grundlegende Begriffe
Einordnung der Protokolle Paket wieder einlesen Auspacken wie
Kisten in Kisten
Netzwerkprogrammierung 8
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
Grundlegende Begriffe
TCP/IPSeit Mitte der 90er: eingesetzt für WWW Im OSI Transport Layer (Schicht 4)Full Duplex (Daten senden und Empfangen
gleichzeitig möglich)PaketorientiertVerbindungsorientiert – Dauerverbindung /
Standleitung
Netzwerkprogrammierung 10
Grundlegende BegriffeRechner 1 Rechner 2
SEQ: 1 ACK: 5 [DATA]
SEQ: 2 ACK: 6 [DATA]
SEQ: 6 ACK: 1 [DATA]
SEQ: 7 ACK: 2 [DATA]
Netzwerkprogrammierung 11
TCP Datenaustausch und Bestätigung
Grundlegende BegriffeRechner 1 Rechner 2
SEQ: 1 ACK: 5 [DATA]
SEQ: 1 ACK: 5 [DATA]
SEQ: 6 ACK: 1 [DATA]
SEQ: 6 ACK: 1 [DATA]
X
Tim
eO
ut .
Neuer Versuch Packet 1 zu übertragen
Netzwerkprogrammierung 12
TCP Timeout und erneutes Senden
Grundlegende Begriffe
UDPunsicher (keine Empfangsbestätigung)Datagramme sind untereinander unabhängigKeine Prüfung ob Empfänger überhaupt
online istUDP ähnlich einer Postwurfsendung (Spam)
und TCP ähnlich eines Telefonanrufs
Netzwerkprogrammierung 13
Grundlegende Begriffe
Sender
Empfänger
Netzwerkprogrammierung 14
UDP Pakete werden verschickt aber keine Bestätigung zurückgesendet
Grundlegende Begriffe
Netzwerk
Sendet UDP Packet
Netzwerkprogrammierung 15
Ein UDP Broadcast Datagramm wird ins Netz geschickt
Alle Rechner im Netz empfangen das Paket
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
Grundlegende Begriffe
URLs Uniform Resource Locator (URL, engl. „einheitlicher
Quellenanzeiger“) Symbolische Adresse www.hs-zigr.de und
physikalische Adresse 141.46.8.60 Unterkategorie von URI (Uniform Resource Identifier) URI bezieht alle Schemas ein (file:// mailto: file://)
URL eigentlich nur http:// und ftp://
Netzwerkprogrammierung 17
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
Grundlegende Begriffe
Intranet
Proxy-ServerZiel-Server(Web-Server)
Internet / Netzwerk
Anwender-Rechner
Netzwerkprogrammierung 19
Proxy-Server Modell
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
Grundlegende Begriffe
S
Ports(einige offen einige
geschlossen)
S
Socketverbindung
Rechner 1 Rechner 2
Ports(einige offen einige
geschlossen)
Netzwerkprogrammierung 21
# 1 - 65536
Grundlegende Begriffe
Standardisierte Ports (well known - TCP): 80: http (Webserver) 21: ftp (Fileserver) 22: sftp (sicherer Fileserver) 25: smtp (Email-Versanddienst) …
Operationen auf Sockets: Öffnen Lesen / Schreiben Schließen Hören (auf eingehende Verbindung warten) Akzeptieren (eine eingehende Verbindung annehmen) Binden (einem Serverprozess einen ganz bestimmten Port zuweisen)
Netzwerkprogrammierung 22
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
Konzepte des WWW
Aufbau eines HTML Dokuments:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html> <head> <title>Titel der Webseite</title> </head> <body> Inhalt der Webseite </body> </html>
Netzwerkprogrammierung 24
Konzepte des WWW
Tags und Attribute<TAG>…</TAG><TAG attribut1="abc">…</TAG>Bis auf wenige Ausnahmen wie XML
Heute immer mehr XHTMLHTML welches XML konform ist
z.B.: <br> muss nun <br/> sein <img src="pic.jpg" />
Netzwerkprogrammierung 25
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
Konzepte des WWW
CSS (Cascading Style Sheets)
Netzwerkprogrammierung 27
Konzepte des WWW
<input name="e1" style="border:none;border-bottom: 2px dashed black;" />
Gute Beispiele und Referenz: http://de.selfhtml.org/
Netzwerkprogrammierung 28
Konzepte des WWW
JavaScript Clientseitige Programmiersprache in HTML
eingebettet (oder externe Datei)Erlaubt dynamische InhalteErweitert die Möglichkeiten von HTML
grundlegend (JavaScript hier stellvertretend für alle Browser-Scriptsprachen wie VBScript)
Netzwerkprogrammierung 29
Konzepte des WWW
JavaScript und DOM HTML Seite ist zur Laufzeit durch ein DOM Object
(Document Object Model) beschrieben Per JavaScript kann das DOM verändert werden http://de.selfhtml.org/dhtml/beispiele/anzeige/datumuh
r.htm http://de.selfhtml.org/javascript/beispiele/anzeige/tasc
henrechner.htm
Netzwerkprogrammierung 30
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
Konzepte des WWW
HTTP Hypertext Transfer ProtocolAufbau der Verbindung des Webbrowsers
mittels TCP/IPTCP Paketinhalt in Form von HTTPHTTP ist ein Klartext-Protokoll
(man kann es als Mensch lesen)HTTP-Request und HTTP-Response
(Anfrage und Antwort)
Netzwerkprogrammierung 32
Web-Server(www.google.de)
Client
GET / HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-icq, */*Accept-Language: deUA-CPU: x86Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)Host: 127.0.0.1:81Connection: Keep-Alive
12
HTTP/1.1 200 OKCache-Control: privateContent-Type: text/htmlSet-Cookie: PREF=ID=5d5b86a54ea78fff:TM=1172152002:LM=1172152002:S=yRZldpnO3qqV9FoT; expires=Sun, 17-J an-2038 19:14:07 GMT; path=/; domain=.google.comServer: GWS/2.1Transfer-Encoding: chunkedDate: Thu, 22 Feb 2007 13:46:42 GMT
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title><style><!--body,td,a,p,.h{font-family:arial,sans-serif}.h{font-size:20px}.h{color:#3366cc}.q{color:#00c}--></style><script><!--function sf(){document.f.q.focus();} ……………
34
Netzwerkprogrammierung 33
Konzepte des WWW
Größte Bedeutung hat jeweils die 1. Zeile Andere Angaben sind meist nicht zwingend nötig Ergebniscodes
200-299 Erfolg (alles Ok) 300-399 Umleitung (auf andere Seite) 400-499 Fehler Clientseite (z.B.: falsche URL eingegeben) 500-599 Fehler Serverseite (ein Serverscript hat Fehler verursacht)
Content-Typen (MIME-Typen) text/html text/plain image/gif image/jpeg application/octet-stream application/msword multipart/form-data
http ist Zustandslos –Anfragen sind nicht miteinander verbunden
Netzwerkprogrammierung 34
Konzepte des WWW
Web-Server was passiert wenn eine Webseite angefordert wird
Netzwerkprogrammierung 35
Konzepte des WWW
Fragen:Beim öffnen einer typischen Webseite mit
Bilder, StyleSheets, JavaScriptenWie viele http-Requests sendet der Browser zum Server?
Ist paralleles herunterladen beim öffnen einer Webseite möglich/sinnvoll?
Netzwerkprogrammierung 36
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
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
Socket Programmierungimport java.io.*;import java.net.*;public class _1_ServerSocket {
public static void main( String[] args ) {ServerSocket server; // unser ServerSockettry{server = new ServerSocket(1111); // maximal 65536Socket 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
Socket Programmierung
Test mit telnet:
Netzwerkprogrammierung 40
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
Socket Programmierungimport java.io.*;import java.net.*;public class _2_ServerSocket {
public static void main(String[] args){ServerSocket server;try { server = new ServerSocket(1111); // maximal 65536 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(); // empfangenSystem.out.println(str); // auf Serverseite ausgebenclient.close();
}}catch (IOException ex){ System.out.println(ex); }
}}
Netzwerkprogrammierung 42
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
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
Socket Programmierungimport java.io.*;import java.net.*;public class _3_MultiThreaded {
public class ClientThread extends Thread { // ein Threadpublic 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
Socket Programmierungpublic void runServer() {
ServerSocket server;try {
server = new ServerSocket(1111); // maximal 65536while (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
Socket Programmierung Nun können wir mit mehreren Telnet Clients gleichzeitig testen:
Netzwerkprogrammierung 47
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
Socket Programmierung
Netzwerkprogrammierung 49
Ü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
Übungsaufgabe 1
Hinweise: http-Response:clientOut.println("HTTP/1.1 200 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 51
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 52
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
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
Socket Programmierung
Client Entwickelnbislang haben wir fertige Clients verwendet
(telnet, Browser)Eigener Client verwendet einen Socket um
sich zum Server zu verbindenLesen und Schreiben auf Socket genau wie
bereits im Server
Netzwerkprogrammierung 55
Socket Programmierungpublic class _4_ClientSocket {
public class ClientThread extends Thread {public void run() { try {Socket clientSocket = new Socket("127.0.0.1", 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
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
Socket Programmierung
WGet Client Ziel: Ein Programm entwickeln, welches
HTML Daten von einem beliebigen Webserver holt.
Aufruf: java wget www.google.de /index.html
Netzwerkprogrammierung 58
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 www.host.de /file");}else{ _5_WGet prog = new _5_WGet(args[0], args[1]);}
}
Netzwerkprogrammierung 59
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
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
Socket Programmierung
Netzwerkprogrammierung 62
Socket Programmierung
UDPverbindungslos„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
Socket Programmierungpublic 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 merkenInetAddress sender = packet.getAddress();
// Ein Paket senden:packet.setAddress(sender);received = "Dank zurück :)";buf = received.getBytes();packet.setData(buf);clientSocket.send(packet);}}
Netzwerkprogrammierung 64
Socket Programmierung
Was kann unser Server:UDP Datagramme annehmen auf Port 1234Dem Sender eine Nachricht zurücksendenAnfragen werden nicht parallel verarbeitet
Verwendet:DatagramSocket und DatagramPacket
Netzwerkprogrammierung 65
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
Socket Programmierungpublic 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 Portbyte[] 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
Socket Programmierung
Netzwerkprogrammierung 68
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: 224.0.0.0 bis 239.255.255.255, dabei ist 224.0.0.0 reserviert und sollte nicht verwendet werden.
Ein Client kann sich einer Gruppe anschließen und verlassen
Vergleich: IP Adresse ~ Frequenz am Radio
Netzwerkprogrammierung 69
Socket Programmierung
String msg = "Hello";
InetAddress group = InetAddress.getByName("228.5.6.7");
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("228.5.6.7");
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):
Socket Programmierung
Multicast Packet aus einer Gruppe empfangen:
InetAddress group = InetAddress.getByName("228.5.6.7");MulticastSocket s = new MulticastSocket(1234);s.joinGroup(group);// Antwort empfangenbyte[] buf = new byte[1000];DatagramPacket recv = new DatagramPacket(buf, buf.length); // nur Buffers.receive(recv);String received = new String(recv.getData(),0,recv.getLength());System.out.println("Empfangen: " + received);s.leaveGroup(group);s.close();
Netzwerkprogrammierung 71
Socket Programmierung
Beide Clients empfangen zeitgleich das Paket
Netzwerkprogrammierung 72
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
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
Ü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
Java Socket Programmierung
Objekte über das Netzwerk versendenJava 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
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
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
Java Socket Programmierung
Netzwerkprogrammierung 79
ServerServer ClientClient
Farbe KmStand AutoTyp
Zeilen auslesen (parsen) und ein Objekt erzeugen.
Bisher:
Jetzt:
ServerServer ClientClient
Auto1 Auto2 Auto3
Fertige Objekte kommen an.
Java Socket Programmierungpublic class ServerSocket {
public static void main(String[] args){ServerSocket server;try { server = new ServerSocket(1111); // maximal 65536 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 ObjektsobjectOut.flush();Auto a2 = (Auto)objectOut.readObject(); // empfangen eines AutoSystem.out.println(a2.Farbe); // auf Serverseite Farbe ausgebenclient.close();
}}catch (IOException ex){ System.out.println(ex); }
}}
Netzwerkprogrammierung 80
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
Java Socket Programmierung
Klassen über das Netzwerk versendenMit Hilfe eines ClassLoaders können Klassen
dynamisch geladen werdenEin 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
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
83Netzwerkprogrammierung
Java Socket ProgrammierungAufgaben:
Laden,Trennen und Verwalten von Klassen Einteilung in sicher/unsicher
Schutz der Java System-KlassenAnmerkungen: 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.
84Netzwerkprogrammierung
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 Codebasedamit:
eigene Namespaces keine Namenskollisionen keine Sichtbarkeit zwischen Namespaces
85Netzwerkprogrammierung
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 Loaderjava.lang.ClassLoader
java.security.SecureClassLoader
java.net.URLClassLoader
AppletClassLoader
Applikation Applet
System-Klassen
86Netzwerkprogrammierung
Java Socket ProgrammierungDer 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
JVMBytecode
Regeln
Class File Verifier
Internet
Class
Class Loader
87Netzwerkprogrammierung
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
88Netzwerkprogrammierung
Java Socket Programmierung
InterfaceICalculator
ClassClient ClassServer
Calculator
Übertragung
Netzwerkprogrammierung 89
Interface beschreibt wie die Calculator Klasse arbeiten wird
Java Socket Programmierung
InterfaceICalculator
ClassClient ClassServer
CalculatorCalculator(lokale Kopie)
verwenden
Netzwerkprogrammierung 90
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);
}
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)); }
}
Java Socket Programmierung
ClassServer:Stellt Java-Klassen zur VerfügungErwartet den Namen der zu übertragenden
KlasseSchickt dem Client die geforderte Klasse als
ByteArray zurück
Netzwerkprogrammierung 93
Java Socket Programmierungpublic class ClassServer {
public void server() {try {ServerSocket ss = new ServerSocket(1234); // TCP Socketwhile(true) {System.out.println("Server at: " + ss.getLocalPort() + ".");Socket s = ss.accept(); // Verbindung annehmenOutputStream 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
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
Java Socket Programmierungclass 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 wollenobjectOut.flush();Object o = objectIn.readObject(); // Klasse als Byte ArraySystem.out.print("object received...");s.close();System.out.println("connection closed.");return (byte[]) o;
}catch (Exception e) { return null; }}}
Netzwerkprogrammierung 96
Java Socket Programmierung
ClassClientBeispielanwendung für NetClassLoader um
eine Klasse zu beziehenVerwendet anschließend die dynamisch
geladene Klasse
Netzwerkprogrammierung 97
Java Socket Programmierungpublic 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 classICalculator 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
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
Java Socket Programmierung
Zusammenfassung:Java Klassen über das Netzwerk dynamisch
übertragenObjectInputStream und
ObjectOutputStream kennen gelerntKann aber nicht mit „nicht Java“ Programmen
kombiniert werden
Netzwerkprogrammierung 100
Ü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
Ü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
RMI
RMI (Remote Methode Invocation)Java-TechnologieObjekte auf einem entfernten Rechner
werden verwendet wie lokaleEignet sich auch zur IPC (Inter-Process
Communication) von Anwendungen auf dem selben Rechner
Netzwerkprogrammierung 103
RMI
Lokaler Rechner (Client)
SampleServer remoteObject;int s;…
s = remoteObject.sum (1,2);
System.out.println(s);
Entfernter Rechner (Server)
public int sum (int a, int b){ return a+b;}
1, 2
3
Netzwerkprogrammierung 104
RMIClient Host
Client Host
RMIClient2
RMIClient1
Client – Side Java VM
Client – Side Java VM
Server Host
RemoteServerObject
Server – Side Web Serverund Java VM
Netzwerkprogrammierung 105
RMIClient.java
verwendet
IRMIServer.java(Interface)
Server.java
verwendet
RMIServer.java(Implementation)
StubsRMIServer.java
SkeletonsRMIServer.java
Remote Reference Layer (RRL)
Transport Layer(TCP)
Transport Layer(TCP)
Wird vom Entwickler
erstellt
Wird von RMIC
erzeugt
Wird von J VM bereitgestellt und
verarbeitet
Netzwerkprogrammierung 106
RemoteServerObject
RMIClient.java
verwendet
IRMIServer.java(Interface)
Server.java
verwendet
RMIServer.java(Implementation)
StubsRMIServer.java
SkeletonsRMIServer.java
returnAufruf
RMI - RegistryBind
(anmelden)
Lookup(nachschauen)
Netzwerkprogrammierung 107
RMI – Registry kennt alle Remote Server Objekte und ist Vermittler (Telefonbuch)
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
RMI verwendenimport java.rmi.Remote;import java.rmi.RemoteException;
public interface Hello extends Remote { String sayHello() throws RemoteException;}
import java.rmi.registry.LocateRegistry;import java.rmi.registry.Registry;
public class Client { private Client() {} public static void main(String[] args) {
String host = (args.length < 1) ? null : args[0];try { Registry registry = LocateRegistry.getRegistry(host); Hello stub = (Hello) registry.lookup("Hello"); String response = stub.sayHello(); System.out.println("response: " + response);} catch (Exception e) { System.err.println("Client exception: " + e.toString()); e.printStackTrace();}
}}
import java.rmi.*;import java.rmi.registry.*;import java.rmi.server.UnicastRemoteObject;
public class Server implements Hello { public Server() {} public String sayHello() {
return "Hello, world!"; } public static void main(String args[]) {
try { Server obj = new Server(); Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0); Registry registry = LocateRegistry.getRegistry(); registry.bind("Hello", stub); System.err.println("Server ready");} catch (Exception e) { System.err.println("Server exception: " + e.toString()); e.printStackTrace();}
}}
Interface
ServerClient
Netzwerkprogrammierung 109
RMI verwendenServer: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("127.0.0.1");Hello stub = (Hello) registry.lookup("Hello");// Hello stub = (Hello )Naming.lookup("//hostname:port/Hello");
Netzwerkprogrammierung 110
RMI verwenden
Netzwerkprogrammierung 111
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
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
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
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
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
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
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
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
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
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
Beispiel: Internet Shopping
Fragen:Warum bleibt der Einkaufskorb auf dem
Server? Wie sieht die typische Datenanbindung einer
solchen Anwendung aus?
Netzwerkprogrammierung 122
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
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
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
RMI verwenden
Zusammenfassung:RMI Architektur kennen gelerntRMI-Registry und RMIC verwendetUnterschied zwischen herkömmlicher
Socketprogrammierung und RMI aufgezeigt
Netzwerkprogrammierung 126
Ü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
Ü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
.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
.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
.NET Remoting
Verwendung von 3 Projektmappen in VS 1 Server Programm 1 Client Programm 1 gemeinsam genutzte
Klassen-Bibliothek
Netzwerkprogrammierung 131
.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); } }
.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); }
.NET Remoting
Netzwerkprogrammierung 134
Arbeiten wie lokales Objekt
static void Main(string[] args) { RemoteObjects.MyServerObject server = (RemoteObjects.MyServerObject) Activator.GetObject (typeof(RemoteObjects.MyServerObject), "http://127.0.0.1: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(); }
.NET Remoting
Netzwerkprogrammierung 135
.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
.NET Remoting
Netzwerkprogrammierung 137
wenn Handler festgelegt wurde dann ausführen
.NET Remoting
Netzwerkprogrammierung 138
.NET Remoting
Vergleich .NET Remoting zu RMIWenn 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
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
RMI und .NET Remoting
Client Host
RMIClient1
Client – Side Java VM
Server Host
RemoteServerObject
Server – Side Web Serverund Java VM
Anfrage
RemoteObject wie lokales behandeln
Antwort
Netzwerkprogrammierung 141
RMI und .NET Remoting
Client Host
RMIClient1
Client – Side Java VM
RemoteServerObject
Netzwerkprogrammierung 142
gedachtes Ergebnis:
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
RMI und .NET RemotingClient Host
RMIClient1
Client – Side Java VM
Client Host
RMIClient2
Client – Side Java VM
Server Host
RemoteServerObject
Server – Side Web Serverund Java VMTeilt mit: Aktuelles
Gebot bei 10€
Sendet ein Gebot von 10€
Client Host
RMIClient3
Client – Side Java VM
Teilt mit: Aktuelles Gebot bei 10€
Client Host
RMIClient4
Client – Side Java VM
Teilt mit: Aktuelles Gebot bei 10€
Netzwerkprogrammierung 144
RMI und .NET Remoting
Realisierung von Callbacks:Client wird selbst zu einem Server und stellt
RemoteObject bereitClient meldet sich am Server an (wie immer)Client teilt Server mit wie man ihn
„zurückrufen“ kannServer führt Liste über alle Clients
Netzwerkprogrammierung 145
RMI und .NET Remoting
Fragen:Welche Nachteile ergeben sich durch den
Einsatz von Callbacks? (Bezug Firewalls, NATs)
Netzwerkprogrammierung 146
Ü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
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
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
WebServices
Alternative zu RMI und .NET RemotingPlattformunabhängigSprachunabhängig
(Perl,Java,C++,.NET,PHP,…)Beispiele: Google, Amazon, .NET PassportAuf HTTP (Web-Server) aufgesetzt, damit
kein zusätzlicher Port nötig, gut erreichbar auch hinter Firewalls
Webservices sind in der Regel „zustandslos“
Netzwerkprogrammierung 150
WebServices
Fragen:Welche Vorteile bietet WebServer als Träger
noch?Kann es dadurch auch Nachteile/Probleme
geben?
Netzwerkprogrammierung 151
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
WebServices
WebServiceConsumer (Client)
WebServiceProvider (Server)
Application Logic
Application Logic
DB
WS-Toolkit WS-Toolkit
Message (SOAP)
Netzwerkprogrammierung 153
WebServices
Netzwerk TCP/IP
Transport HTTP
WebServiceConsumer (Client)
WebServiceProvider (Server)
Application Logic
Application Logic
DB
WS-Toolkit WS-Toolkit
Message (SOAP)
WSDL
Liest
Beschreibt
Netzwerkprogrammierung 154
WebService
Woher weiß der Client wo ein Server steht und welche WebServices er anbietet?
Netzwerkprogrammierung 155
Dienst finden
Dienst bekanntgeben
WebService
Wie kann man nun die angebotenen Dienste beschreiben?
public String[] doGoogleSearch (String s){…}
Netzwerkprogrammierung 156
Wie soll dies ein Scheme Program verstehen?
WebService
WSDL XML-Sprache zur Selbstbeschreibung von
WebServices
WSDL Beispiel: http://www.webservicex.net/globalweather.asmx?wsdl http://api.google.com/GoogleSearch.wsdl http://www.webservicex.net/CreditCard.asmx?wsdl CreditCard WS - was halten Sie davon?
Netzwerkprogrammierung 157
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
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
WebServices Google Suchanfrage stellen mit SOAP Nachricht:
<SOAP-ENV:Body> <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch"
SOAPENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <keyxsi:type="xsd:string">00000000000000000000000000000000</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 160
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
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
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
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 6.12.2006 seinen WebService wieder eingestellt (es werden keine neuen Keys mehr vergeben)
Netzwerkprogrammierung 164
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
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
Beleg - Projekte
Entwickeln Sie eine Client-Server Projekt welches eines oder mehrere der vorgestellten Konzepte (Sockets, RMI, Remoting, WS,…) verwendet.
Netzwerkprogrammierung 167
Beleg – Projekte Ideen
Sockets:Email Client alla Outlook (vereinfacht)FTP Client oder ServerChat Applet & Server …
RMI / .NET RemotingSchach ApplikationDiverse Kartenspiele…
Netzwerkprogrammierung 168
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
Beleg – Projekte Ideen
Stellen Sie mir ihr Projekt vor (welchen Inhalt soll es haben, wie wollen Sie es umsetzen)
Diskussion
Netzwerkprogrammierung 170
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
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
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
Java Applets
init () start () stop () destroy ()
Seite verlassen
Zurück zur Seite
Seiteangezeigt
Appletvernichten
Appleterstellen
Netzwerkprogrammierung 174
Blau = einmaligGrün = kann mehrmals auftreten
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 175
Java Applets
Netzwerkprogrammierung 176
SELFHTML Beispiel
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
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
Java Appletsimport 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
<APPLET CODE="HalloApplet.class" WIDTH="260" HEIGHT="40"> <PARAM name="Font" value="Arial">
</APPLET>
Java Applets
Applets in JAR Archiven verpackenMehrere 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
Java Applets
JAR Archive erzeugen jar cvf AppletArchive.jar *.classEin Archive erstellen und alle Class-Files im
aktuellen Ordner einbindenEs können aber auch alle anderen Dateien
(Bilder, HTML Dateien,…) eingebunden werden
Netzwerkprogrammierung 181
Java Applets
Applet in Webseite mit Archive einbinden:
Netzwerkprogrammierung 182
<APPLET ARCHIVE="Archiv.jar" CODE="HalloApplet.class" WIDTH="260" HEIGHT="40"> <PARAM name="Font" value="Arial">
</APPLET>
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
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
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
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
Java Webstart
Vorteile von Webstart:Keine Konfiguration vom Anwender nötigKeine typische Installation mit „Zielverzeichnis“,
„Full, Medium, Small“ oder ähnlichemBei einer neuen Programmversion (auf dem
Server) wird beim nächsten Programmstart (Anwender) automatisches Update durchgeführt
Netzwerkprogrammierung 187
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
Java Webstart
Voraussetzungen (Server):Web-Server (z.B.: Apache)MIME Type muss gesetzt seinProgramm muss in JAR Dateien verpackt sein
Voraussetzungen (Client):Java JRE muss installiert sein (1.3+) Internet Browser (IE, FireFox,…)
Netzwerkprogrammierung 189
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
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 191
Java Webstart
Beispiel mit NetBeans und Apache:Einfache Fensteranwendung NetBeans anweisen eine JAR Datei für das
Projekt anzulegenApache 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 192
Java WebstartJNLP Datei Beispiel:
<?xml version="1.0" encoding="utf-8"?><jnlp spec="1.0+“ codebase="http://127.0.0.1/dist" href="webstart.jnlp"> <information> <title>Demo</title> <vendor>Wir</vendor> <description>Unser Demo Programm</description> <homepage href="http://www.hs-zigr.de"/> <offline-allowed/> <shortcut online="false"> <desktop/> <menu submenu="Superdemos"/> </shortcut> </information>…
Netzwerkprogrammierung 193
Java WebstartJNLP Datei Beispiel:
… <resources> <jar href="WebStart.jar"/> <jar href="lib/swing-layout-1.0.jar"/> <j2se version="1.4+" href="http://java.sun.com/products/autodl/j2se" /> </resources> <application-desc main-class="webstart.Form"/></jnlp>
Netzwerkprogrammierung 194
Java Webstart
JNLP APIFunktionen für OpenDialog, SaveDialog,
PrintDialog,… auch in nicht signierten JAR‘sWenn nur diese Funktionalität benötigt wird
deutlich sicherer als signiertes JAR Benötigt jnlp.jar als Bibliothek (API Referenz)
Netzwerkprogrammierung 195
Ü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:
http://www-personal.umich.edu/~lsiden/tutorials/signed-applet/signed-applet.html
http://java.sun.com/developer/technicalArticles/Security/Signed/
Netzwerkprogrammierung 196
.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
.NET im Browser
Netzwerkprogrammierung 198
.NET im Browser
Netzwerkprogrammierung 199
.NET im Browser
VS erzeugt eine DLL bei Kompilation Einbinden in HTML Seite über:
<html><body><object id="simpleControl1" classid="http:./Control1.dll#Control1.UserControl1“ height="338" width="744" VIEWASTEXT></object></body></html>
Netzwerkprogrammierung 200
.NET im Browser
Einbindung funktioniert leider nicht lokal DLL muss auf einen Webserver gelegt
werden Vorzugsweise IIS, Apache kann auch dazu
konfiguriert werden http://84.16.228.218/applet/run.html
http://84.16.228.218/applet/cards.html
Netzwerkprogrammierung 201
.NET im Browser
Zusammenfassung:Konzept nahezu identisch mit Java-AppletsNicht plattformunabhängig (eventuell mit
Mono unter Linux)Sprachunabhängig, sowohl J#, C#, VB#
eignen sich zur Entwicklung
Netzwerkprogrammierung 202
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
Serverseitige Programmierung
Der ServerKeine zusammenhängende AbarbeitungRequests müssten zugeordnet werdenSpeicherobjekte gehen ohne explizite
Sicherung nach jedem Response verlorenVor jeder Requestverarbeitung müssen
vorangehende Speicherobjekte wiederhergestellt werden
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
Quelle: Wikipedia
Netzwerkprogrammierung 206
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
Web-Server(www.google.de)
Client
GET / HTTP/1.1Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-icq, */*Accept-Language: deUA-CPU: x86Accept-Encoding: gzip, deflateUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)Host: 127.0.0.1:81Connection: Keep-Alive
12
HTTP/1.1 200 OKCache-Control: privateContent-Type: text/htmlSet-Cookie: PREF=ID=5d5b86a54ea78fff:TM=1172152002:LM=1172152002:S=yRZldpnO3qqV9FoT; expires=Sun, 17-J an-2038 19:14:07 GMT; path=/; domain=.google.comServer: GWS/2.1Transfer-Encoding: chunkedDate: Thu, 22 Feb 2007 13:46:42 GMT
<html><head><meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"><title>Google</title><style><!--body,td,a,p,.h{font-family:arial,sans-serif}.h{font-size:20px}.h{color:#3366cc}.q{color:#00c}--></style><script><!--function sf(){document.f.q.focus();} ……………
34
Netzwerkprogrammierung 208
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("<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 209
Java Servlet Beispielpublic 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
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
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 212
Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung 213
Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung 214
Servlet / JSP Entwicklung mit NetBeans
Netzwerkprogrammierung 215
Servlet / JSP Entwicklung mit NetBeans
Bei Ausführung startet ein Browser:
Netzwerkprogrammierung 216
Servlet / JSP Entwicklung mit NetBeans
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
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
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
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
Ü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
Übungsaufgabe 7 Ein Beispiel:
Netzwerkprogrammierung 225
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
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
ASP .NET - Beispiel
Login Seite geschützte Seite die Login erfordert
Netzwerkprogrammierung 228
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
Top Related