34
Praktikum aus Softwareentwicklung 2 1 Java Praktikum – SS 2010 – [email protected] Netzwerkprogrammierung & Threads Praktikum aus Softwareentwicklung 2

Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – [email protected] 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

1Java Praktikum – SS 2010 – [email protected]

Netzwerkprogrammierung & Threads

Praktikum aus Softwareentwicklung 2

Page 2: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

2Java Praktikum – SS 2010 – [email protected]

Netzwerkprogrammierung& Threads

• Netzwerkprogrammierung– URL, URLConnection, UDP, TCP

• Threads– Parallele Abläufe, Synchronisation, …

Page 3: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

3Java Praktikum – SS 2010 – [email protected]

Host ComputerHost Computer

NetzwerkprogrammierungGrundlagen (1/4)

• Kommunikation zwischen verteilten Programmen

Java Virtuelle

MaschineJava Virtuelle

Maschine

Netzwerk

Java Virtuelle

MaschineJVM, Web Server, Datenbank, Ftp..

Netzwerk Adapter Netzwerk Adapter

Page 4: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

4Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungGrundlagen (2/4)

Netzwerk

7: Application

6: Presentation

5: Session

4: Transport

3: Network

2: Data Link

1: Physical

OSI 7 Schichten

Application

Presentation

Session

Transport

Network

Data Link

Physical

OSI 7 Schichten

Übertragung

http://de.wikipedia.org/wiki/OSI-Modell

Page 5: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

5Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungGrundlagen (3/4)

• ISO OSI, IP und Java

Application

Presentation

Session

Transport

Network

Data Link

Physical

OSI 7 Schichten

Client oder Server: HTTP, FTP...

TCP, UDP

Internet Protocol

Ethernet, Token Ring, FDDI, ..

Internet

URL

Streams, Reader,

Writer

Socket…

InetAddress

java.net

Interface zum Netzwerk Adapter

Page 6: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

6Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungIP, TCP, UDP

• Internet Protocol (IP)– Routing der IP-Pakete (versehen mit Empfänger, Sender)

• Transport Control Protocol (TCP)– Verbindung: Aufbau eines 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 Verbindung - zustandslos– Pakete werden durch Anwendung gesendet– Paket kann verloren gehen, keine Kontrolle

Page 7: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

7Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungGrundlagen (4/4)

• http://www.ethereal.com/

Application

Presentation

Session

Transport

Network

Data Link

Physical

OSI 7 Schichten

Page 8: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

8Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungHTTP 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/index.html

– https://meine.bank.com

– ftp://www.nowhere.net

– file://D:/tmp/sample.html

– mailto://[email protected]

Page 9: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

9Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungVerwendung von URLs

• Ein Objekt der Klasse java.net.URL repräsentiert eine Resource im Internet

try {

URL u = new URL("http://java.sun.com/index.html");

} catch(MalformedURLException e) { … }

• Parsen:

u.getProtocol();

u.getHost(); // ... (File, Port, Ref)

• Direktes Lesen von einer URL:

InputStream in = u.openStream();

Page 10: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

10Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungURLConnection

• Verbindung wird durch ein URLConnection Objekt repräsentiert und bei dessen Erzeugung aufgebaut.

URL u = new URL(„http://...“); URLConnection uc = u.openConnection();

• Datenaustausch erfolgt über Streams der

InputStream ui = uc.getInputStream(); OutputStream uo = uc.getOutputStream();

• HttpURLConnection

HttpURLConnection httpuc = (HttpURLConnection)uc; httpuc.getRequestMethod(); httpuc.getResponseMessage();

Page 11: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

11Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungBeispiel: "mailto:"

import java.io.*;import java.net.*;

... System.setProperty("mail.host", „smtp.tiscover.com");

URL u = new URL("mailto:[email protected]");

URLConnection conn = u.openConnection();

PrintWriter out = new PrintWriter(

new OutputStreamWriter(conn.getOutputStream()));

out.println("Subject: Test");

out.println(); out.println("Hello World!"); out.close(); ...

Page 12: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

12Java Praktikum – SS 2010 – [email protected]

Host 1169.254.235.246

Http-Client

• Sockets sind die Schnittstelle zwischen Anwendung und Netzwerkverbindung

• Host:Port zur Identifizierung der Anwendungen

• Die "Server"-Anwendung wartet auf einem vereinbarten Port auf Verbindungsaufnahmen durch Client-Anwendungen

NetzwerkprogrammierungSockets

9951 80

Http-Server

Host 2169.254.235.247

UDP: PaketeTCP: Stream

Page 13: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

13Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungTCP – 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 undwartet auf einer bestimmten Portnummer auf Anfragen:

public Socket accept();

• Verbindungsabbruch durch Schließen des Sockets

Page 14: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

14Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungTCP – 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

Page 15: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

15Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungUDP – 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);

Page 16: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

16Java Praktikum – SS 2010 – [email protected]

NetzwerkprogrammierungUDP – Senden/Empfangen

• InitialisierungDatagramSocket socket = new DatagramSocket(9998);

• Request schickenInetAddress address =

InetAddress.getByName("host");

DatagramPacket packet =

new DatagramPacket(buf, buf.length, address, 8889);

socket.send(packet);

• Response empfangenpacket = new DatagramPacket(buf, buf.length);

socket.receive(packet);

String received = new String(packet.getData());

Page 17: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

17Java Praktikum – SS 2010 – [email protected]

Netzwerkprogrammierung& Threads

• Netzwerkprogrammierung– URL, URLConnection, UDP, TCP

• Threads– Parallele Abläufe, Synchronisation, …

Page 18: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

18Java Praktikum – SS 2010 – [email protected]

ThreadsEigenschaften

• "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

Page 19: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

19Java Praktikum – SS 2010 – [email protected]

ThreadsImplementierung 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();

Page 20: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

20Java Praktikum – SS 2010 – [email protected]

ThreadsBeispiel: SimpleThread

public class ThreeThreadsTest {

public static void main (String[] args) {

new SimpleThread("Jamaica").start();

new SimpleThread("Fiji").start();

new SimpleThread(„Bora").start();

}

}

Leer-Implementierung

Haupt-programm von SimpleThread

VM erzeugt OS-Thread und ruft run() auf

java.lang.Thread

void run()void start()

SimpleThread

void run() {...}

Page 21: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

21Java Praktikum – SS 2010 – [email protected]

ThreadsLebenszyklus

Page 22: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

22Java Praktikum – SS 2010 – [email protected]

ThreadsSimpleThread Sequenzdiagramm

Page 23: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

23Java Praktikum – SS 2010 – [email protected]

ThreadsThread, Runnable und Object

Page 24: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

24Java Praktikum – SS 2010 – [email protected]

ThreadsBeispiel: Time Server

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();

} }}

Page 25: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

25Java Praktikum – SS 2010 – [email protected]

ThreadsBeispiel: Time Handler

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); } }

}

Page 26: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

26Java Praktikum – SS 2010 – [email protected]

ThreadsPrioritäten

• Jeder Thread hat bestimmte Prioritätpublic 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

Page 27: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

27Java Praktikum – SS 2010 – [email protected]

ThreadsSynchronisation (1/2)

• Schlüsselwörter– Variablen: volatile– Codeblöcke und Methoden: synchronizedBlö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

Page 28: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

28Java Praktikum – SS 2010 – [email protected]

ThreadsSynchronisation (2/2)

• <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 wartet, 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

Page 29: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

29Java Praktikum – SS 2010 – [email protected]

ThreadsProducer / Consumer Beispiel (1/2)

• Consumer muss mit dem Lesen warten bis aktuelle Daten vorhanden sind

• Producer muss mit dem Schreiben warten, bis Consumer die aktuellen Daten abgeholt hat

Page 30: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

30Java Praktikum – SS 2010 – [email protected]

ThreadsProducer / Consumer Beispiel (2/2)

class Consumer extends Thread {

Data dat;

Consumer(Data dat) {

this.dat = dat;

}

public void run() {

while (1==1) {

System.out.println(dat.get());

...

}

}

}

class Producer extends Thread {

Data dat;

Producer(Data dat) {

this.dat = dat;

}

public void run() {

while (1==1) {

dat.put(i); ...

}

}

}

Page 31: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

31Java Praktikum – SS 2010 – [email protected]

ThreadsImplementierungsdetails (1/2)

• Schreiben auf Data

public synchronized void put(int i) {

while (newValue) {

try {

wait();

} catch(InterruptedException e) {} } val = i; newValue = true;

notifyAll();

}

Page 32: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

32Java Praktikum – SS 2010 – [email protected]

ThreadsImplementierungsdetails (2/2)

• Lesen von Data

public synchronized int get() {

while (!newValue) {

try {

wait();

} catch(InterruptedException e) {} } newValue = false;

notifyAll();

return val;

}

Page 33: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

33Java Praktikum – SS 2010 – [email protected]

ThreadsGruppen

• Gruppierung von Threads• Gemeinsame Eigenschaften, gemeinsame Manipulation

• Jeder Thread gehört zu einer Thread Gruppepublic Thread(ThreadGroup group,String name)public final ThreadGroup getThreadGroup()

• Klasse ThreadGrouppublic ThreadGroup(String name)public ThreadGroup(ThreadGroup parent,String name)public static int enumerate(Thread[] tarray)public void destroy()

• Thread Gruppen können geschachtelt seinpublic ThreadGroup getParent()

Page 34: Netzwerkprogrammierung & Threads · Praktikum aus Softwareentwicklung 2 Java Praktikum – SS 2010 – Gerald.Ehmayer@borland.com 6 Netzwerkprogrammierung IP, TCP, UDP • Internet

Praktikum aus Softwareentwicklung 2

34Java Praktikum – SS 2010 – [email protected]

Ende der 3. Übung