Netzwerkprogrammierung & Threads

Ähnliche Dokumente
Netzwerkprogrammierung & Threads

Verbindungen zu mehreren Clients. Informatik B - Objektorientierte Programmierung in Java. Vorlesung 23: Netzwerkprogrammierung/ Kommunikation 2

5. Threads, Serverprozesse und Benachrichtigungen

4. Thread- und Netzwerk- Programmierung

Transmission Control Protocol (TCP)

Referat: Netzwerkprogrammierung in Java

Java und Netzwerkkommunikation

Programmiermethodik. Übung 10

Beispiel Time Client/Server

Dr. Monika Meiler. Inhalt

Kommunikation und Synchronisation von Prozessen

Informatik B. Vorlesung 17 Netzwerkprogrammierung. Dr. Ralf Kunze

Advanced Network Programming

Programmieren II. Sockets. Vorlesung 16. Handout S. 1. Dr. Klaus Höppner. Hochschule Darmstadt Sommersemester Sockets.

TCP und UDP Sockets in Java

Parallele Prozesse. Prozeß wartet

Informatik B. Vorlesung 16 Netzwerkprogrammierung. Dr. Ralf Kunze

Programmiermethodik. Übung 13

Thread-Synchronisation in in Java. Threads Wechselseitiger Ausschluss Bedingte Synchronisation Beispiel: Warteschlangen

2 Verbindungslose Kommunikation mit UDP

Socket-Programmierung unter Java

PROG 2: Einführung in die Programmierung für Wirtschaftsinformatiker

1. Netzwerkprogrammierung für mobile Geräte

Programmieren II. Timer. Vorlesung 11. Handout S. 1. Martin Schultheiß. Hochschule Darmstadt Sommersemester Timer. Sockets.

Jan Distel. Im Rahmen der Veranstaltung Fortgeschrittene Programmierung in Java

2.2 Prozesse in Java

Netzwerkprogrammierung

Netzwerke. Netzwerk-Programmierung. Sven Hartmeier.

Networking. Motivation Grundlagen von Sockets Klasse Socket Klasse ServerSocket Exceptions Klasse URL

Ausgewählte Implementierungsprobleme

Verteilte Systeme CS5001

Klausurvorbereitung VS1 (Prof. Brecht) (B0rg Edition)

Praktikum aus Softwareentwicklung 2, Stunde 5

1. Netzwerkprogrammierung für mobile Geräte

1.) Nennen Sie Aufgaben und mögliche Dienste der Transportschicht (Transport Layer) des ISO/OSI-Schichtenmodells.

Techniken der Projektentwicklung

12. Threads in Java. Sequentielle Abarbeitung (2) Beispiel: Thread (1) Sequentielle Abarbeitung (1)

Java-Programmierung. Remote Method Invocation - RMI

Einführung in die Programmierung Blockkurs Java

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Thread-Konzept in objektorientierten Programmiersprachen. Threads. Threads in Java

Nebenläufige und verteilte Programme CS2301

Prozesse. Prozesse sind Programme. Prozesse können aus Unterprozessen bestehen. Prozesshierarchie Unterprozesse Threads

Beispiel für überladene Methode

2. Architektur von Kommunikationssystemen

Nebenläufige Programmierung in Java: Threads

Nebenläufigkeit mit Java

TCP/IP-Protokollfamilie

Übung zu Grundlagen der Betriebssysteme. 10. Übung

Kommunikationsnetze. 2. Direkte TCP/IP-Verbindungen 2.1 Höhere Programmiersprachen

Networking. JOHANNES KEPLER UNIVERSITY LINZ Research and teaching network. Pratikum SWE 2 M. Löberbauer, T. Kotzmann, H.

Klausur zur Vorlesung Verteilte Systeme im SS 2007 Prof. Dr. Odej Kao 24. Juli 2007

Tipps und Hinweise zum Bezug der Beitragssatzdatei V5.0

Breitband ISDN Lokale Netze Internet WS 2009/10. Martin Werner, November 09 1

Synchronisation in Java. Invisible Web

Java I/O, Serialisierung und Netzwerkprogrammierung

Einführung. Internet vs. WWW

Computeranwendung in der Chemie Informatik für Chemiker(innen) 5. Internet

Java RMI Remote Method Invocation

Kapitel 4: Design von Client/Server-Software. Middleware in Java vieweg 2005 Steffen Heinzl, Markus Mathes

TCP/IP Protokollstapel

Client/Server-Systeme

Rechnernetze. 6. Übung

Betriebssysteme G: Parallele Prozesse (Teil A: Grundlagen)

Python Programmierung. Dipl.-Ing.(FH) Volker Schepper

TCP/UDP. Transport Layer

Parallele und funktionale Programmierung Wintersemester 2015/ Übung Abgabe bis , 10:00 Uhr

TIA Portal V13 Kommunikation mit S7-1500

TCP/IP Socket Programmierung in C# (Ci sharp) Multicast und Broadcast

TCP-Sockets in Java und C. Verteilte Systeme Hochschule Regensburg Vorlesung 4, Universitätsstraße 31, Regensburg

Themen. Web Service - Clients. Kommunikation zw. Web Services

VS3 Slide 1. Verteilte Systeme. Vorlesung 3 vom Dr. Sebastian Iwanowski FH Wedel

Mobile und Verteilte Datenbanken

4. Servlets Ein kleiner Einstieg. Kurze Java Historie. Erinnerung: Internet Anwendungen. Konzept eines Seitenaufrufs

Dezentrale Kontrolle: Aktive Objekte. Aktive Objekte Die Klasse AnimatorThread Aktivierung Objekte beobachten Die Java-Klasse Thread

Client-Server mit Socket und API von Berkeley

Versuchsziele Konzepte der parallelen Programmierung am Beispiel von Threads anwenden können. Einbau von Kontrollmechanismen mittels Semaphore.

39 Object Request Brokers. 40 Components of an ORB Stubs and Skeletons Stub

Systemprogrammierung. Projekt: Java RMI. Wintersemester 2006 / 2007

4. Servlets Ein kleiner Einstieg

Mobile und Verteilte Datenbanken

Projektaufgabe Peer-To-Peer Chat Programm

Das Monitorkonzept Brinch-Hansen

Nebenläufige Programmierung I

Das ISO / OSI -7 Schichten Modell

Internet - Grundzüge der Funktionsweise. Kira Duwe

Transkript:

Netzwerkprogrammierung & Threads Praktikum aus 1

Netzwerkprogrammierung & Threads Netzwerkprogrammierung URL, URLConnection, UDP, TCP Threads Praktikum aus Parallele Programme, Synchronisation, 2

Netzwerkprogrammierung Grundlagen (1/2) Kommunikation zwischen verteilten Programmen Host Computer Java Virtuelle Maschine Host Computer Java Java Virtuelle Maschine JVM, Web Server, Datenbank, Ftp.. Netzwerk-Betriebssystem Netzwerk-Betriebssystem Netzwerk 3

Netzwerkprogrammierung Grundlagen (2/2) ISO OSI, IP und Java - http://www.ethereal.com/ OSI 7 Schichten Application Presentation Session Transport Network Data Link Physical Internet http, ftp, telnet,... TCP, UDP Internet Protocol Ethernet, Token Ring, FDDI,.. java.net URL etc. Streams Socket InetAddress 4

Netzwerkprogrammierung HTTP und URLs Hypertext Transfer Protocol (HTTP/1.1) Uniform Resource Locator protocol :// [user@] host [:port] /filepath [ref] RFC2396 http://www.rfc-editor.org/ http://www.w3.org/addressing/url/url-spec.html Beispiele: http://www.somewhere.com:80/remotesurvey.html https://secure.tiscover.com:443 ftp://www.nowhere.net/ file://d:/tmp/bsp.html mailto://alexander.sommer@tiscover.com 5

Netzwerkprogrammierung Verwendung von URLs Ein Objekt der Klasse java.net.url repräsentiert eine Ressource im Internet try { URL u = new URL("http://java.sun.com/index.html"); catch(malformedurlexception e) { // URL(String protocol, String host, int port, String file) Parsen: u.getprotocol(); u.gethost(); //... (File, Port, Ref) Direktes Lesen von einer URL: InputStream in = u.openstream(); 6

Netzwerkprogrammierung URLConnection Verbindung wird durch ein URLConnection Objekt repräsentiert und bei dessen Instanziierung aufgebaut. Generell ist das Erzeugen einer Connection zu einem Url ein mehrstufiger Prozess. URLConnection uc = u.openconnection(); u.connect(); Datenaustausch erfolgt über Streams der URLConnection InputStream ui = uc.getinputstream(); OutputStream uo = uc.getoutputstream(); HttpURLConnection HttpURLConnection http_uc = (HttpURLConnection)uc; uc.getrequestmethod(); uc.getresponsemessage(); 7

Netzwerkprogrammierung Beispiel: "mailto:" import java.io.*; import java.net.*;... System.setProperty("mail.host", smtp.tiscover.com"); URL u = new URL("mailto:godot@world.net"); URLConnection conn = u.openconnection(); PrintWriter out = new PrintWriter( new OutputStreamWriter(conn.getOutputStream())); out.println("subject: Test"); out.println(); out.println("hello World!"); out.close();... 8

Netzwerkprogrammierung TCP/IP, UDP Internet Protocol (IP) Routing der IP-Pakete (versehen mit Empfänger, Sender) Transport Control Protocol (TCP) Verbindung über gemeinsamen Kommunikationskanal Stückelt Nachricht in mehrere durchnummerierte Pakete Überprüft ob Paket Ziel erreicht hat, ansonsten Wiederholung Empfänger setzt Pakete in richtiger Reihenfolge wieder zusammen Uniform Datagram Protocol (UDP) Keine ständige Verbindung - zustandslos Jedes Paket wird einzeln gesendet Paket kann verloren gehen, keine Kontrolle Multicast ist möglich 9

Netzwerkprogrammierung Sockets Sockets sind die Schnittstelle zwischen Anwendung und Netzwerkverbindung Host:Port zur Identifizierung der Anwendungen Host 1 169.254.235.246 Client 9951 UDP: Pakete TCP: Stream Host 2 169.254.235.247 80 Http- Server Die "Server"-Anwendung wartet auf einem vereinbarten Port auf Verbindungsaufnahmen durch Client-Anwendungen 10

Netzwerkprogrammierung UDP paketorientiert Datenaustausch basiert auf Paketen (Datagramme) DatagramPacket repräsentiert Datenpaket Paket zum Senden: DatagramPacket(byte[] buf, int length, <Host>, <Port>) Paket zum Empfangen: DatagramPacket(byte[] b, int len) DatagramSocket zum Senden und Empfangen public void send(datagrampacket d); public void receive(datagrampacket d); 11

Netzwerkprogrammierung UDP Senden/Empfangen Initialisierung DatagramSocket socket = new DatagramSocket(9998); Request schicken InetAddress address = InetAddress.getByName("host"); DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 8889); socket.send(packet); Response empfangen packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String received = new String(packet.getData()); 12

Netzwerkprogrammierung TCP verbindungsorientiert Kommunikation erfolgt bidirektional über Sockets Socket := (Host, Portnummer) Implementierung des Datenaustausches mit Streams Client stellt Verbindung her durch Instanziierung eines Socket Objektes Server ist implementiert durch ServerSocket und wartet auf einer bestimmten Portnummer auf Anfragen: public Socket accept(); Verbindungsabbruch durch Schließen des Sockets 13

Netzwerkprogrammierung Verbindungsaufbau Client Socket s = new Socket(<Host>,<Port>); InputStream si = s.getinputstream(); OutputStream so = s.getoutputstream(); Server (gestartet auf <Host>) ServerSocket ss = new ServerSocket(<Port>); Socket s = ss.accept(); // blockierend InputStream from_so = s.getinputstream(); OutputStream to_si = s.getoutputstream(); Das Socket Objekt repräsentiert die Verbindung 14

Netzwerkprogrammierung Datenaustausch Lesen vom InputStream, schreiben auf den OutputStream Protokoll muss vereinbart werden Kodierung der Daten Koordination der Aktivitäten (Kontrollfluss) Beispiel: Simple Mail Transfer Protocol (RFC-821) Zeilenweiser Austausch von Kommandos und Statusantwort Client sendet Kommando an den SMTP-Server (z.b. "MAIL FROM:<somebody@somewhere.com>\r\n") Server antwortet mit Status-Code (z.b. "250 OK\r\n") 15

Netzwerkprogrammierung & Threads Netzwerkprogrammierung URL, URLConnection, UDP, TCP Threads Praktikum aus Parallele Programme, Synchronisation, 16

Threads Eigenschaften "Heavy-weight" Prozess Adressraum Ausführungszustand Programmzähler, Ausführungs-Stack eventuell mehrere Threads "Light-weight" Prozess (Thread) teilt sich den Adressraum mit seinem Parent und anderen Threads jeder Thread ist ein eigener, sequentieller Kontrollfluss mit einem eigenen Programmzähler, Ausführungs-Stack und Zustand User-Thread Daemon-Thread: terminieren automatisch, wenn der letzte nicht-daemon Thread beendet wird Paralleler Ablauf des Parent-Prozesses und aller Threads 17

Threads Praktikum aus Implementierung von Threads Ableiten von der Klasse java.lang.thread und Überschreiben der Methode run Implementierung des Interfaces Runnable und Übergabe des Objekts an ein Thread Objekt im Konstruktor class Clock implements Runnable { public void run() {... Clock clk = new Clock(); Thread clkthread = new Thread(clk).start(); 18

Threads Beispiel: SimpleThread Praktikum aus Thread void run() void start() Runnable Leer- Implement ierung VM erzeugt OS-Thread und ruft run() auf SimpleThread void run() Hauptprogramm von SimpleThread public class ThreeThreadsTest { public static void main (String[] args) { new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start(); new SimpleThread( Bora").start(); 19

Threads Lebenszyklus yield wait Alive Created start Running sleep [sleeptime is over] Suspended new notify[all] interrupt Stopped 20

Threads SimpleThread Sequenzdiagramm ThreeThreadsTest:Class main new jamaica:simplethread start run new fiji:simplethread start run 21

Threads Thread, Runnable und Object Object notify () notifyall () wait ()... Thread Thread (name: String) Thread (r: Runnable) start () run () sleep (millis:long) yield () interrupt () isinterrupted () join () isdaemon () setdaemon ()... <<realizes>> <<interface>> Runnable run() 22

Threads Beispiel: Time Server Praktikum aus public class TimeServer { public static void main (String args[]) throws IOException { ServerSocket server = new ServerSocket(1234); while (true) { System.out.println("Waiting for client..."); Socket client = server.accept(); System.out.println("Client from" + client.getinetaddress() + "connected."); TimeHandler handler = new TimeHandler(client); new Thread(handler).start(); 23

Threads Beispiel: Time Handler Praktikum aus public class TimeHandler implements Runnable { private Socket client; public TimeHandler(Socket _client) { client = _client; public void run () { try { DataOutputStream out = new DataOutputStream( new BufferedOutputStream(client.getOutputStream())); Date date = new Date(); System.out.println(date.toString()); out.writeutf(date.tostring()); out.flush(); client.close(); catch (IOException e) { System.err.println(e); 24

Threads Prioritäten Jeder Thread hat bestimmte Priorität public final static int MAX_PRIORITY = 10; public final static int NORM_PRIORITY = 5; public final static int MIN_PRIORITY = 1; Priorität kann selbst definiert werden: public final void setpriority(int np); public final int getpriority(); Thread mit höchster Priorität läuft bis zum Thread- Ende Scheduling nur für Threads mit gleicher Priorität 25

Threads Synchronisation (1/2) Praktikum aus Schlüsselwörter Variablen: volatile Codeblöcke und Methoden: synchronized Blöcke können auch verschachtelt sein Jedes Objekt hat einen Monitor (realisiert Lock) Eintritt in einen synchronized Block des Objekts nur möglich, wenn Zählerstand des Monitors auf 0, bei Eintritt wird Zählerstand erhöht. Nicht-synchronized Methoden können immer ausgeführt werden. synchronized wird nicht vererbt Object Monitor int count holder waiter 0..1 * Thread 26

Threads Synchronisation (2/2) Praktikum aus <Object>.wait() ein Thread, der einen Lock auf <Object> hat, wird unterbrochen und kommt in eine Warteschlange Monitor wird freigegeben (Zähler auf 0 gesetzt) <Object>.notify() oder notifyall() Ein Thread H (holder) gibt Zustandsänderung bekannt Ein Thread W (waiter) kommt aus der Warteschlange und blockt, bis H Monitor freigibt durch: Beenden, bzw. Verlassen des synchronized Blocks Geht selbst in Warteposition mit wait() Wenn W Monitor erhält, wird er aktiviert 27

Threads Praktikum aus Producer / Consumer Beispiel (1/2) Producer Thread Consumer Thread put() Data Object get() Consumer muss mit dem Lesen warten bis aktuelle Daten vorhanden sind Producer muss mit dem Schreiben warten, bis Consumer die aktuellen Daten abgeholt hat 28

Threads Praktikum aus Producer / Consumer Beispiel (2/2) Producer run () Wartet bis Daten von C. gelesen Data 1 val : int 1 newvalue : boolean get (): int put (i:int) class Producer extends Thread { Data dat; Producer(Data dat) { this.dat = dat; public void run() { while (1==1) { dat.put(i);... Wartet bis Daten von P. geliefert Consumer run () class Consumer extends Thread { Data dat; Consumer(Data dat) { this.dat = dat; public void run() { while (1==1) { System.out.println(dat.get());... 29

Threads Praktikum aus Implementierungsdetails (1/2) Schreiben auf Data public synchronized void put(int i) { while (newvalue) { try { wait(); catch(interruptedexception e) { val = i; newvalue = true; notifyall(); 30

Threads Praktikum aus Implementierungsdetails (2/2) Lesen von Data public synchronized int get() { while (!newvalue) { try { wait(); catch(interruptedexception e) { newvalue = false; notifyall(); return val; 31

Threads Gruppen Gruppierung von Threads Gemeinsame Eigenschaften, gemeinsame Manipulation Jeder Thread gehört zu einer Thread Gruppe (Zuordnung bei Instanziierung) public Thread(ThreadGroup group,string name) public final ThreadGroup getthreadgroup() Klasse ThreadGroup public ThreadGroup(String name) public ThreadGroup(ThreadGroup parent,string name) public static int enumerate(thread[] tarray) public void destroy() Thread Gruppen können geschachtelt sein (Baum) public ThreadGroup getparent() 32

Ende der 3. Übung 33