![Page 1: Forschungszentrum Karlsruhe Technik und Umwelt Clemens Düpmeier, 11.02.2014- 1 - Client-Server Kommunikation Die Socket Schnittstelle](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/1.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/2.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/3.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/4.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/5.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/6.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/7.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/8.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/9.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/10.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/11.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/12.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/13.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/14.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/15.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/16.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/17.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/18.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/19.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/20.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/21.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/22.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/23.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/24.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/25.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/26.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/27.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/28.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/29.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/30.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/31.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/32.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/33.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/34.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/35.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/36.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/37.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/38.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/39.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/40.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/41.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/42.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/43.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/44.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/45.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/46.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/47.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/48.jpg)
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](https://reader034.vdocuments.mx/reader034/viewer/2022051819/55204d6949795902118bfa1a/html5/thumbnails/49.jpg)
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