Datacommunicatie en netwerken

Slides:



Advertisements
Verwante presentaties
OOS Object geOrienteerd Software-ontwerp - 3
Advertisements

JAVA1 H 16. MULTITHREADING. 1. INLEIDING. Threads: delen van het programma die in concurrentie met elkaar gelijktijdig in executie gaan. Thread is een.
Gestructureerd programmeren in C
Van domeinklasse tot implementatie
OOP met Java Sessie 1.
Het ontwerpen van een klasse
Objecten Hoofdstuk 6 Hoofdstuk 6 Hoofdstuk 6 1.
Het type int Tekenen met Java operatoren
Klassen en objecten.
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 5: Bestanden.
Hoofdstuk 6: Controle structuren
Hoofdstuk 4: Klassen definiëren
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 10: Omgaan met problemen.
Hoofdstuk 2 Hallo, C# !.
Algoritmiek Arrays: wat zijn dat en wat kun je ermee? Loops: hoe hou je ze in bedwang? Hoorcollege 6 - Ma. 9 okt L.M. Bosveld-de Smet.
1 Voorwaarden hergebruik Modulair ontwerp Low coupling High cohesion.
Inleidend probleem Data structuur (hiërarchie van classes)
Consoleprogramma’s Hoofdstuk 19. Visual Basic.NET voor studenten2 In dit hoofdstuk … Hoe consoletoepassingen maken In- en uitvoer bij consoleprogramma’s.
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
Installatie van de banksoftware. Stop de CD in de cd-lezer van de transfercomputer. Het installatieprogramma zal automatisch starten, anders via verkenner.
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Oefeningen Hoofdstuk 3.
Algoritmiek Object-georiënteerd Programmeren
JAVA1 H 22. COLLECTIONS FRAMEWORK. 1. INLEIDING. Collections framework Is een verzameling van data structuren, interfaces en algoritmen Meest voorkomende.
6.1 Inleiding HOOFDSTUK 6 METHODEN
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
Opgave 2a nMet een InputStream lees je bytes uit een binare file nMet een Reader lees je characters uit een tekstfile.
Herhaling Java-programmatie en geautomatiseerd testen (vervolg)
Deel XIV Eerste echte e-commerce applicatie Implementatie (vervolg) 1 Internetapplicaties Deel 15: Herhaling Java-programmatie en geautomatiseerd testen.
Deel X: JSP + Java + database 1 Internetapplicaties Deel 10: JSP + Java + database: Client Server via http.
Hoofdstuk 5 Interactie. Controls Form Label Button Label TextBox.
Inleiding tot programmeren
Interfaces Hoofdstuk 23 Hoofdstuk 23.
Animatie nAnimatie: “tekenfilm” programma toont automatisch veranderende beelden nGemakkelijk te programmeren met gebruik van de klasse Thread “draadje”
Computertechniek 2 – ARM assembler Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1  programma draaien vanuit ROM.
Tircms02-p les 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
JAVA: een platformonafhankelijke taal
Hoofdstuk 14.1 Algoritmen: Zoeken in een netwerk.
Scope. Scope van variaben/methoden Een variabele is te gebruiken binnen de { en } waarbinnen hij is aangemaakt. Hetzelfde geld voor een methode { int.
Hoofdstuk 10.3 Tekst-editor: MDI-interface Dialogen Files lezen Abstracte klassen.
Programma zonder window commandline interface. Commandline programma public static void main (String [ ] params) { System. out. println (“Hoi allemaal!”);
Opgave 1a ncompiler: vertaalt broncode naar machine-uitvoerbare code ninterpreter: voert broncode direct uit.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 7 Polymorfie en overerving © 2014, Gertjan Laan, versie 2.
Java Objectgeoriënteerd Programmeren in Java met BlueJ Hoofdstuk 8: Gebruikersinterface © 2014, Gertjan Laan, versie 2.
INFITT01 - Internettechnologie WEEK 3. Programma Sessies JSP.
Java & het Web Programma: Contexts Listeners Scope/Attributes Thread safety.
Soorten programma’s nConsole- applicatie. Soorten programma’s nConsole- applicatie nWindows- applicatie.
Java & het Web Programma: Sessies JSP. Stateless vs. Stateful(1) HTTP is stateless WAT IS STATELESS?
Herhaling: He who does not learn from history, is doomed to repeat it.
Java voor beginners Doel: Een spel maken in LWJGL Door: Jim van Leeuwen.
De definitie van een object. Een object is een verzameling van eigenschappen en bewerkingen. Veel voorkomende objecten zijn: D (display) Gui (user interface)
Objectgeoriënteerd Programmeren (2)
Gameprogrammeren: Lists en interfaces
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Gameprogrammeren: Methoden
OOS Object geOrienteerd Software-ontwerp - 5
Tinpro015b-les6 Templates.
Tinpro015b-les4 Klassen.
Voorbeeld: Simulatie van bewegende deeltjes
Voortborduren op eerder gedaan werk
Gameprogrammeren: Abstracte klassen
Gameprogrammeren: Klassen en objecten
Digitale beeldverwerking
Implementatie Zoekboom
Software Development fundamentals
Software Development fundamentals
Transcript van de presentatie:

Datacommunicatie en netwerken Hogeschool Gent Datacommunicatie en netwerken Johan Van Schoor Bert Van Vreckem 2006-2007

Project Groepswerk (per 2) Netwerkapplicatie schrijven in Java Opgaven: zie dokeos ofwel eigen voorstel Evt. combineren met ander vak Deadline: laatste oef les Op tijd! (zoniet sanctie) CD+dossier met afgewerkt product Programma draait zelfstandig, buiten een IDE Gebruikershandleiding Dossier over achterliggende technologie, ontwerp, ... Demo op zie dokeos

Project – opgaven Peer-to-peer filesharing over een LAN Chatprogramma Mailserver Webserver Webcache RFC implementatie Eigen voorstel?

Het belang van threads Onontbeerlijk in netwerkprogramma's (met sockets) Client: Snel reageren op invoer gebruiker Communicatie met de server Server: Verbindingen met verschillende clients tegelijk

Een thread stoppen Door de method run() op een normale manier te laten eindigen: De thread houdt de waarde van een variabele in het oog die aangeeft of de thread moet stoppen Eventueel een extra variabele als je de thread tijdelijk wil stilleggen (“suspend”) NIET met stop(), suspend() of resume(): deprecated

Threads in Java 1.5. De overgang naar 1.5. brengt belangrijke wijzigingen mee i.v.m. multithreading. Gebruiken de Runnable interface ipv een subklasse van Thread. Gebruiken een ThreadPool die threads bevat die de Runnable objecten uitvoeren. Geen start() meer nodig. Synchronisatie gebeurt via lock en unlock op een extra object van de klasse ReentrantLock. De klasse ReentrantLock levert Condition objecten waarmee de synchronisatie tussen de verschillende threads die een object delen kan worden geregeld. await de thread komt in wait state signal de thread komt terug in de runnable state

Voorbeeld: Twee threads (1). import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class ThreadHelloCount { public static void main(String[] args) HelloThread hello = new HelloThread(); CountThread count = new CountThread(); ExecutorService threadExecutor = Executors.newFixedThreadPool(2); threadExecutor.execute( hello ); threadExecutor.execute( count ); threadExecutor.shutdown(); System.out.printf("MainThread finished\n"); }

Voorbeeld: Twee threads (2). class HelloThread implements Runnable { private static Random generator =new Random(); public void run() { for (int i=0; i<5; i++) { try { System.out.printf("Hello!\n"); Thread.sleep(generator.nextInt(3000)); } catch (InterruptedException e) { System.out.println(e.toString()); System.out.printf("HelloThread finished\n");

Voorbeeld: Twee threads (3). class CountThread implements Runnable { private static Random generator = new Random(); public void run() { for (int i=0; i<5; i++) { try { System.out.printf("%d\n",i+1); Thread.sleep(generator.nextInt(3000)); } catch (InterruptedException e) { System.out.println(e.toString()); System.out.printf("CountThread finished\n");

Voorbeeld: Twee threads (4). Mogelijke uitvoer:

Voorbeeld: Thread Synchronisatie (1). public interface Buffer { public void set( int value ); public int get(); } import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; public class SynchronizedBuffer implements Buffer { private Lock accessLock = new ReentrantLock(); private Condition canWrite = accessLock.newCondition(); private Condition canRead = private int buffer; private boolean occupied = false;

Voorbeeld: Thread Synchronisatie (2). public void set( int value ) { accessLock.lock(); try { while ( occupied ) { canWrite.await(); } buffer = value; occupied = true; canRead.signal(); catch ( InterruptedException e ) { e.printStackTrace(); finally { accessLock.unlock();

Voorbeeld: Thread Synchronisatie (3). public int get() { int readValue = 0; accessLock.lock(); try { while ( !occupied ) { canRead.await(); } occupied = false; readValue = buffer; canWrite.signal(); catch ( InterruptedException e ) { e.printStackTrace(); finally { accessLock.unlock(); return readValue;

Voorbeeld: Thread Synchronisatie (4). import java.util.Random; import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class SynchronizedThreadApp { public static void main(String []arg) { ExecutorService threadExecutor = Executors.newFixedThreadPool(2); Buffer shared = new SynchronizedBuffer(); threadExecutor.execute( new Producer(shared); threadExecutor.execute( new Consumer(shared) ); threadExecutor.shutdown(); }

Voorbeeld: Thread Synchronisatie (5). class Producer implements Runnable { private Buffer shared; private static Random generator = new Random(); public Producer(Buffer sb) { shared=sb; } public void run() { for(int i = 1; i <=10; i++) { try { Thread.sleep(generator.nextInt(2000)); catch (InterruptedException e) { System.out.println(e.toString()); shared.set(i);

Voorbeeld: Thread Synchronisatie (6). class Consumer implements Runnable { private Buffer shared; private static Random generator = new Random(); public Consumer(Buffer sb) { shared=sb; } public void run() { for(int i = 0; i <10; i++) { try { Thread.sleep(generator.nextInt(2000)); catch (InterruptedException e) { System.out.println(e.toString()); System.out.printf("%4d",shared.get()); System.out.println(); Uitvoer: rij getallen van 1 tot 10.

Voorbeeld: Thread Synchronisatie met BlockingQueue (1). import java.util.concurrent.ArrayBlockingQueue; public class BlockingBuffer implements Buffer { private ArrayBlockingQueue<Integer> buffer; public BlockingBuffer() { buffer = new ArrayBlockingQueue<Integer>( 3 ); } public void set( int value ) { try { buffer.put( value ); // indien er geen plaats is // in de queue wordt er gewacht (wait state) catch ( InterruptedException e ) { e.printStackTrace();

Voorbeeld: Thread Synchronisatie met BlockingQueue (2). public int get() { int readValue = 0; try { readValue =buffer.take();//indien er geen waarden // in de queue zijn wordt er gewacht (wait state) } catch ( InterruptedException e ) { e.printStackTrace(); return readValue;

Voorbeeld: Thread Synchronisatie met BlockingQueue (3). import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; public class BlockingBufferThreadApp { public static void main(String []arg) { ExecutorService threadExecutor = Executors.newFixedThreadPool(2); Buffer shared = new BlockingBuffer(); threadExecutor.execute( new Producer(shared) ); threadExecutor.execute( new Consumer(shared) ); threadExecutor.shutdown(); }

Oefening multithreading: Clients requests. Start een “Server thread” en drie “Client Threads”. De clients sturen elk 5 berichten (in dit geval: hun naam) naar de server op met random tijdsverloop (telkens tussen 0 en 3 sec) De server vangt de verschillende berichten op en drukt ze af op console. Na 15 berichten sluit de server thread af.

Oefening multithreading: Clients requests. Mogelijke output :