49
Clemens Düpmeier, 05/18/22 - 1 - Forschungszentrum Karlsruhe Technik und Umwelt Client-Server Kommunikation Die Socket Schnittstelle

Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Embed Size (px)

Citation preview

Page 1: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 1 -

Forschungszentrum KarlsruheTechnik und Umwelt

Client-Server Kommunikation

Die Socket Schnittstelle

Page 2: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 2 -

Forschungszentrum KarlsruheTechnik und Umwelt

Kommunikation über Socket API

• Rechner kommunizieren heutzutage hauptsächlich über TCP/IP Netze (Inter-/Intranets)

• Die in C geschriebene Socket-API ist die (unterste) Betriebssystemschnittstelle zur Kommunikation über TCP/IP Netze

• Sockets sind in Analogie zum Umgang mit Dateidatenströmen realisiert

Page 3: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 3 -

Forschungszentrum KarlsruheTechnik und Umwelt

Wichtige Funktionen der Socket API

• socket - Erzeugen eines Sockets

• bind - Binden einer Adresse an einen Socket

• accept - Verbindungswunsch akzeptieren

• connect - Verbindung anfordern

• read - Lesen vom Socket

• write - Schreiben auf Socket

Page 4: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 4 -

Forschungszentrum KarlsruheTechnik und Umwelt

Server-Client Kommunikation

Server (passiv) Client (aktiv)s=socket(...);bind(/* address */);

listen(s,length);

for (;;) { new_sock=accept(/*...*/);

if (fork() == 0)handle(new_sock);

}

s=socket(...);/* no bind */

connect(s, /* address */);

talk_with_server(s);

Page 5: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 5 -

Forschungszentrum KarlsruheTechnik und Umwelt

Funktionsweise von accept()

Serverrechner Clientrechner

Serverprozess Clientprozess

Netzwerkschnittstelle Netzwerkschnittstelle

LAN

accept nach accept

Sockets

80 50167

Socket

Page 6: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 6 -

Forschungszentrum KarlsruheTechnik und Umwelt

Eigenschaften der Socket Schnittstelle

• Unterste Schnittstelle zum Betriebssystem

• Synchronisation der Kommunikation liegt voll beim Anwender

• Fehlerbehandlung liegt ebenfalls beim Anwender

• Nicht binär transparente Datenübertragung

• Nicht objekt-orientiert

Page 7: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 7 -

Forschungszentrum KarlsruheTechnik und Umwelt

SMTP Protokoll$telnet mailhost.iai.fzk.de 25Trying 141.52.44.1...Connected to mailhost.iai.fzk.deEscape character is '^]'.220 mailhost.iai.fzk.de sendmail version 10.1 ready

at Wed, 6 May 2002 22:52:47 +0200HELO uisun7.iai.fzk.de250 mailhost.iai.fzk.de Hello uisun7.iai.fzk.deMAIL From: <[email protected]>250 Sender OK (verified)RCPT To: <duepmeier>250 Receiver OK (verified)DATA354 Start mail input; end with <CRLF>.<CRLF>Subject: Dann wollen wir mal SMTP testenHier beginnt die eigentliche Nachricht der MailDann können auch noch weitere Zeilen folgen,die allerdings mit einem Punkt auf einer einzelnen Zeile enden müssen..250 OKQUIT

Page 8: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 8 -

Forschungszentrum KarlsruheTechnik und Umwelt

HTTP Protokoll - Ablauf

Client Server

GET /index.html HTTP/1.0If-Modified-Since: Saturday, 12-Dec-98, 12:34:56 GMT

Anfrage

HTTP/1.0 200 OKMIME-Version: 1.0Content-type: text/htmlContent-length: 123Last-Modified: Saturday, 12-Dec-98 12:34:56 GMT

<HTML>Hier beginnt die eigentliche HTML Datei...

Antwort

Page 9: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 9 -

Forschungszentrum KarlsruheTechnik und Umwelt

Einige HTTP Clientkommandos

• GET Liefert ein Datei vom Server

• HEAD Liefert nur Dateiinformationen

• POST Sendet Daten (CGI) an den Server

• PUT Sendet komplette Dateien an

Server

• DELETE Löschte Datei vom Server

Page 10: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 10 -

Forschungszentrum KarlsruheTechnik und Umwelt

Beispiele für HTTP Requests

GET / HTTP/1.0Connection: Keep-AliveUser-Agent: Mozilla/2.0 (Win95; I)Host: merlinAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

POST /cgi/4848 HTTP/1.0Referer: http://tecfa.unige.ch:7778/4848Connection: Keep-AliveUser-Agent: Mozilla/3.01 (X11; I; SunOS 5.4 sun4m)Host: tecfa.unige.ch:7778Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*Content-type: application/x-www-form-urlencodedContent-length: 42

name=Ulli&nachname=Ullenboom

Page 11: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 11 -

Forschungszentrum KarlsruheTechnik und Umwelt

HTTP Server Statuscodes

• 1xx: Informierend, 2xx: Erfolgreich

• 3xx: Rückfrage, 4xx: Fehler beim Client

• 5xx: Fehler beim Server

• 200 OK 201 Created202 Accepted 204 No Content

• 300 Multiple Choices 301 Moved Permantly302 Moved Temporarily 304 Not Modified

• 400 Bad Request 401 Unauthorized403 Forbidden 404 Not Found

• 500 Internal Server E. 501 Not Implemented502 Bad Gateway 503 Service Unavailable

Page 12: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 12 -

Forschungszentrum KarlsruheTechnik und Umwelt

Java Socket API

Page 13: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 13 -

Forschungszentrum KarlsruheTechnik und Umwelt

InetAddress Klasse

InetAddress

static IntetAddress getByName() // erzeuge Adressobjektstatic InetAddress getLocalHost() // erzeuge Adressobjekt…Byte[] getAddress()…String getHostName() // gebe mir HostnameString getHostAddress() // gebe mir Adresse…

Page 14: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 14 -

Forschungszentrum KarlsruheTechnik und Umwelt

Beispiel Nutzung von InetAddress

public class WhoAmI { public static void main(String args[]) throws Exception {

InetAddress myAddress=InetAddress.getLocalHost();

System.out.println("Hostname: " + myAddress.getHostName());

System.out.println("IP Adresse: " + myAddress.getHostAddress());

}}

Page 15: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 15 -

Forschungszentrum KarlsruheTechnik und Umwelt

InetSocketAddress Klasse

InetSocketAddress (extends SocketAddress)

InetSocketAddress(String hostname, int port)InetSocketAddress(InetAddress address, int port)…InetAddress getAddress() // Hostteil als InetAdressgetHostName(): String // gebe mir HostnamegetPort(): String // gebe mir Portnummer…

Page 16: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 16 -

Forschungszentrum KarlsruheTechnik und Umwelt

Client-Server Socketverbindungen in Java

ClientAnwendung

SocketObjekt

ServerApplikation

ServerSocketObjekt

SocketObjekt

new

accept()

return

new

connect()

Datenaustausch über das Netz

ServerSocketblockiert in accept()bis Client einenVerbindungsaufbaudurchgeführt hat

Die beiden Socketssind nun verbunden

Page 17: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 17 -

Forschungszentrum KarlsruheTechnik und Umwelt

Socket KlasseSocket

Socket()Socket(String host, int port)Socket(InetAddress host, int port)...void close()void connect(SocketAddress endpoint)Void connect(SocketAddress endpoint, int timeout)…int getPort()InetAddress getInetAddress()…InputStream getInputStream()OutputStream getOutputStream()

Page 18: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 18 -

Forschungszentrum KarlsruheTechnik und Umwelt

ServerSocket Klasse

ServerSocket

ServerSocket()ServerSocket(int port)ServerSocket(int port, int backlog)...void bind(SocketAddress endpoint)Void bind(SocketAddress endpoint, int backlogSocket accept()void close()…int getLocalPort()InetAddress getInetAddress()…

Page 19: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 19 -

Forschungszentrum KarlsruheTechnik und Umwelt

Beispiel TCP Serverapplikationpublic class MultServer { public static void main(String args[]) throws Exception {

ServerSocket server=new ServerSocket(3141);

while (true){ Socket client=server.accept(); InputStream in =client.getInputStream(); OutputStream out=client.getOutputStream();

int firstNumber=in.read(); int secondNumber=in.read();

out.write(firstNumber * secondNumber);}

}}

Page 20: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 20 -

Forschungszentrum KarlsruheTechnik und Umwelt

Beispiel TCP Clientapplikationpublic class MultClient { public static void main(String args[]) { try {

Socket server = new Socket("Hostname", 3141);

InputStream in = server.getInputStream();OutputStream out = server.getOutputStream();

out.write(4); out.write(5);

int result=in.read();System.out.println("4 * 5 = " +result);

} catch (IOException e) {System.out.println("Fehler bei Kommunikation");

} }}

Page 21: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 21 -

Forschungszentrum KarlsruheTechnik und Umwelt

Gepufferte Ein-/Ausgabe über Sockets

Socket t = new Socket(...);

....

BufferedReader in = new BufferedReader(new InputStreamReader(t.getInputStream()));

PrintStream os = new PrintStream(t.getOutputStream());

...

in.readLine();

...

os.println("Irgendwelche Strings + Objekte mit toString() ausgeben";

...

Page 22: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 22 -

Forschungszentrum KarlsruheTechnik und Umwelt

Client mit zeilenorientierter Kommunikationpublic class PingClient { public static void main(String args[]) throws Exception {

Socket t = new Socket(args[0], 7);

BufferedReader in = new BufferedReader(new InputStreamReader(t.getInputStream()));

PrintStream out = new PrintStream(t.getOutputStream());

String test= "Hallo aus Karlsruhe, vom " + new Date();out.println(test);String antwort=in.readLine();if (antwort.equals(test))

System.out.println("Server lebt");else

System.out.println("Server ist nicht erreichbar"); }}

Page 23: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 23 -

Forschungszentrum KarlsruheTechnik und Umwelt

Kommunikation über UDP

Applikation

DatagramSocketObjekt

DatagramPacket Objekt

(dp)

new

new

send/receive(dp)

dp Paket enthält neben Daten auch Ziel-IPund Zielportnummer

Page 24: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 24 -

Forschungszentrum KarlsruheTechnik und Umwelt

DatagramSocket Klasse

DatagramSocket

DatagramSocket()DatagrammSocket(int port)DatagrmSocket(int port, InetAddress laddr)...void bind(SocketAddress laddress)void close()void receive(DatagramPacket p)void send(DatagramPacket p)…int getLocalPort()InetAddress getLocalAddress()…

Page 25: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 25 -

Forschungszentrum KarlsruheTechnik und Umwelt

DatagramPacket Klasse

DatagramPacket

DatagramPacket(byte[] buf, int length)DatagrammSocket(byte[] buf, int length,

InetAddress addr, int port)...InetAddress getAddress()void getPort()byte[] getData()void setData(byte[] buf)int getLength()…

Page 26: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 26 -

Forschungszentrum KarlsruheTechnik und Umwelt

Beispiel UDPClientpublic class UDPClient { public static void main(String args[]) throws Exception {

DatagramPacket packet;DatagramSocket dSocket = new DatagramSocket();InetAddress serverAddress=InetAddress.getByName("ServerName");

while (true) {String s = new Date().toString();

packet = new DatagramPacket(s.getBytes(), s.length(),serverAddress, 4711);

dSocket.send(packet);System.out.println("Paket " + packet + " abgeschickt");Thread.sleep(1000);

} }}

Page 27: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 27 -

Forschungszentrum KarlsruheTechnik und Umwelt

Beispiel UDPServerpublic class UDPServer { public static void main(String args[]) throws Exception {

byte data[] = new byte[1024];DatagramPacket packet;DatagramSocket socket = new DatagramSocket(4711);

while (true) {packet=new DatagramPacket(data, data.length);socket.receive(packet);InetAddress address = packet.getAddress();int port = packet.getPort();

System.out.println("Paket von " + packet.getAddress() +"am Port " + packet.getPort() + " erhalten");

insertIntoDatabase(packet.getData());}

}}

Page 28: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 28 -

Forschungszentrum KarlsruheTechnik und Umwelt

Vorteile Low-Level Client Server

• effizient bzgl. Laufzeit

• überall verfügbar

• standardisiertes Interface

• für interne und externe Kommunikation verfügbar

Page 29: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 29 -

Forschungszentrum KarlsruheTechnik und Umwelt

Nachteile Low-Level Kommunikation

• zu komplex bzgl. der Kommunikationsdetails

• Synchronisation/Fehlerbehandlung liegt voll beim Anwendungsprogrammierer

• nicht binär-transparent ohne Arbeit

• Clients müssen wissen, wo Server sind

• Mix von Applikationslogik + Netzwerktransportlogik

Page 30: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 30 -

Forschungszentrum KarlsruheTechnik und Umwelt

Client-Server Zugriff auf Datenbanken

(am Beispiel von JDBC)

Page 31: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 31 -

Forschungszentrum KarlsruheTechnik und Umwelt

Was ist die JDBC API

• eigentlich Produktname, aber oft übersetzt als Java Database Connectivity API

• API zum Zugriff auf Datenquellen, die eine tabellen-artige Struktur haben

• Beispiele für Datenquellen sind:

– relationale Datenbanken

– Dateien mit tabellenartiger Struktur

– ODBC Datenquellen unter Windows

Page 32: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 32 -

Forschungszentrum KarlsruheTechnik und Umwelt

Typisches Nutzungsschema

• Treiber für spezielle Datenquelle laden

• Verbindung mit Datenquelle herstellen

• Abfrage machen oder Update Operation durchführen

• Resultate der Abfrage bearbeiten

Connection con = DriverManager.getConnection( "jdbc:myDriver:wombat", "myLogin", "myPassword");

Statement stmt = con.createStatement();

ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1"); while (rs.next()) {

int x = rs.getInt("a"); String s = rs.getString("b"); float f = rs.getFloat("c");

}

Page 33: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 33 -

Forschungszentrum KarlsruheTechnik und Umwelt

Typen von JDBC Treibern

• JDBC-ODBC Bridge Treiber

– nutzt die ODBC API, um auf ODBC Datenquellen zuzugreifen

• Native-API Java Treiber

– ruft von Java aus Native Datenbank API auf

• Netz-Protokoll All-Java Treiber

– benutzt Netz-Protokoll, um auf Middleware Server zuzugreifen,

der seinerseits auf Datenbank zugreift

• Native Protocol All-Java Treiber

– direkter Aufruf des Datenbankservers über DBMS

Netzprotokoll

Page 34: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 34 -

Forschungszentrum KarlsruheTechnik und Umwelt

JDBC-ODBC Datenquelletry {

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");} catch (Exception e) { System.out.println("Konnte JDBC-ODBC Bridge Treiber nicht laden"); return;}

Connection con = DriverManager.getConnection( "jdbc:odbc:myDatabase", "myLogin", "myPassword");

• Treiber lassen sich mit Class.forName laden

• Oben wird im JDK enthaltener JDBC-OBDC Bridge Treiber geladen

• ODBC Datenquellen werden mit jdbc:odbc:Name-der-Datenquelle referenziert

Page 35: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 35 -

Forschungszentrum KarlsruheTechnik und Umwelt

JDBC-MSQL Datenquelletry {

Class.forName("com.imaginary.sql.msql.MsqlDriver");} catch (Exception e) { System.out.println("Konnte JDBC Treiber nicht laden"); return;}

Connection con = DriverManager.getConnection( "jdbc:msql://machine-name:port#/database-name", "myLogin", "myPassword");

• Treiber lassen sich mit Class.forName laden

• Oben Treiber für mSQL Datenbank geladen

• Datenquellen werden allgemeiner durch URL's der Formjdbc:subprotocol:subname referenziert

Page 36: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 36 -

Forschungszentrum KarlsruheTechnik und Umwelt

DriverManager KlasseDriverManager

static Connection getConnection(String url)static Connection getConnection(String url, Properties info)static Connection getConnection(String url,

String user, String password)// verschiedene Arten Verbindung aufzubauen...static void registerDriver(Driver driver)// wird von Treibern zum Registrieren verwendet...static void setLogWriter(PrintWriter out)// Loggen von Informationen über JDBC Protokollverkehrstativ void println(String message)// Ausgabe von Messagestrings auf Logging Ausgang…

Page 37: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 37 -

Forschungszentrum KarlsruheTechnik und Umwelt

Verschiedene Statement-Objekte

• Statement Objekt erzeugen

Statement stmnt = con.createStatement()

• PreparedStatement Objekt erzeugen

PreparedStatement pstmnt = con.prepareStatement("...")

• CallableStatement Objekt erzeugen

CallableStatement cstmnt = con.prepareCall("...")

Page 38: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 38 -

Forschungszentrum KarlsruheTechnik und Umwelt

Verwendung der verschiedenen Statement Objektklassen

• Statement für einfache Operationen

• PreparedStatement Objekte verwenden, wenn SQL Abfragen öfters wiederholt werden

• CallableStatement Objekte nutzen, um StoredProcedures auszuführen

Page 39: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 39 -

Forschungszentrum KarlsruheTechnik und Umwelt

Datenbankabfrage über Statement Objekt durchführen

try {// Statement Objekt über Connection Objekt erzeugenStatement stmt = con.createStatement();

// SQL Abfrage als String definierenString query = "SELECT cityName, Population, Temperature" +

" FROM cityTable";

// Abfrage durch Aufruf von Methode executeQuery() durchführenResultSet rs = stmt.executeQuery(query);

// hier nun Ergebnisse durch Auswertung von ResultSet // verarbeiten

Page 40: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 40 -

Forschungszentrum KarlsruheTechnik und Umwelt

ResultSet abarbeiten

try {...

// Abfrage durch Aufruf von Methode executeQuery() durchführenResultSet rs = stmt.executeQuery(query);

while (rs.next()){

System.out.println("Stadt: " + rs.getString("cityName"));System.out.println("Anzahl Einwohner: " +

rs.getLong("Population"));System.out.println("Durchschnittstemperatur: " +

rs.getInt("Temperature"));}

} catch ...

Page 41: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 41 -

Forschungszentrum KarlsruheTechnik und Umwelt

Zugriffsmethoden und SQL Datentypen

• getInt() INTEGER• getLong() BIG INT• getFloat() REAL• getDouble() FLOAT• getBignum() DECIMAL• getBigDecimal() NUMBER• getBoolean() BIT• getString() VARCHAR• getString() CHAR• getAsciiStream() LANGVARCHAR• getDate() DATE• getTime() TIME• getTimestamp() TIME STAMP• getObject() jeder Typ

Page 42: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 42 -

Forschungszentrum KarlsruheTechnik und Umwelt

Daten in Datenbank einfügen

try {// Statement Objekt über Connection Objekt erzeugenStatement stmt = con.createStatement();

// SQL Statement zum Einfügen von Daten definierenString sqlstring = "INSERT INTO cityTable " +

"(cityName, Population, Temperature) " +"VALUES (Karlsruhe, 275000, 15)";

// Einfügen mit Aufruf der Methode executeUpdate() durchführenint affectedRows = stmt.executeUpdate(sqlstring);

Page 43: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 43 -

Forschungszentrum KarlsruheTechnik und Umwelt

Client-Server Architekturformen

Präsentationslogik Präsentationslogik Präsentationslogik Präsentationslogik Präsentationslogik

Präsentationslogik

Anwendungslogik

Anwendungslogik

Anwendungslogik

Anwendungslogik

Anwendungslogik

Anwendungslogik

Datenbanklogik

Datenbanklogik

Datenbanklogik

Datenbanklogik

Datenbanklogik

Server

Client

VerteiltePräsentation

EntferntePräsentation

VerteilteAnw.logik

EntfernteDatenbank

VerteilteDatenbank

Datenbanklogik

Page 44: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 44 -

Forschungszentrum KarlsruheTechnik und Umwelt

2-Tier Applikation mit JDBC Datenzugriff

Java Applikation

JDBC

DBMS

Client Maschine

Rechner mit Datenbank

proprietäres Protokoll zu Datenbank

Page 45: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 45 -

Forschungszentrum KarlsruheTechnik und Umwelt

Multitier Architekturen

• Bei Multitier Architekturen ist die Software eines Gesamtsystems in mehrere Schichten zerlegt

• Typisch ist eine 3-Tier Architektur mit den Schichten Datenbanklogik, Anwendungslogik und Präsentationslogik

• Die einzelnen Schichten sind durch Interfaces voneinander getrennt und gegebenenfalls durch verteilte Objekttechnologie auf verschiedene Rechner verteilt

Page 46: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 46 -

Forschungszentrum KarlsruheTechnik und Umwelt

Klassische Multitier Architektur

Präsentationsschicht

Applikationslogik

Datenlogik Datenlogik

Page 47: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 47 -

Forschungszentrum KarlsruheTechnik und Umwelt

Klassische 3-Tier Architektur mit JDBC

Applikationsserver

JDBC

DBMS

Client Maschine

Rechner mit Datenbank

proprietäres Protokoll zu Datenbank

Clientz.B. Browser

HTTP, RMI, CORBA

Server mit Middle-Tier(Applikationslogik)

Page 48: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 48 -

Forschungszentrum KarlsruheTechnik und Umwelt

4-Tier Architektur mit JDBC

Applikationsserver

JDBC

DBMS

Client Maschine

Rechner mit Datenbank

proprietäres Protokoll zu Datenbank

Clientz.B. Browser

RMI, CORBA

Server mit (Applikationslogik)

WebserverServlet

HTTP

Page 49: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle

Clemens Düpmeier, 04/11/23 - 49 -

Forschungszentrum KarlsruheTechnik und Umwelt

Middleware

• Mittelschicht zwischen Teilen einer Verteilten Applikation

• verdeckt Low-Level Schnittstellen – insbesondere untere Kommunikationsschicht

• vereinfacht das Schreiben verteilter Systeme mit Mehrschicht-Architektur

• erlaubt es Anwendungen, sich auf die Applikationsdetails zu konzentrieren