^ Linux - Friheden til at programmere i Java: Version 0.7.20040516 - 2020-12-31 ^| | [[java:java-traade|forrige]] | Kapitel 17. Flertrådet programmering | [[java:java-traade-opgaver|næste]] | ---- ==== 17.2. Ekstra eksempler ==== === 17.2.1. En flertrådet webserver === Herunder har vi lavet en flertrådet webserver (sammenlign med webserveren i[[java:java-net|Kapitel 16]]). For at gøre det nemmere at se, hvad der foregår, lader vi hver anmodning vente i 10 sekunder, før den afslutter. import java.io.*; import java.net.*; import java.util.*; public class Anmodning //implements Runnable// { //private Socket forbindelse;// Anmodning(Socket forbindelse) { this.forbindelse = forbindelse; } //public void run()// { try { PrintWriter ud = new PrintWriter( //forbindelse.getOutputStream()// ); BufferedReader ind = new BufferedReader( new InputStreamReader( //forbindelse.getInputStream()// )); String anmodning = ind.readLine(); System.out.println("start "+new Date()+" "+anmodning); ud.println("HTTP/0.9 200 OK"); ud.println(); ud.println("Svar"); ud.println("

Svar

"); ud.println("Tænker over "+anmodning+"
"); for (int i=0; i<100; i++) { ud.print(".
"); ud.flush(); Thread.sleep(100); } ud.println("Nu har jeg tænkt færdig!"); ud.flush(); forbindelse.close(); System.out.println("slut "+new Date()+" "+anmodning); } catch (Exception e) { e.printStackTrace(); } } }
Når der kommer en anmodning, oprettes et Anmodning-objekt, der snakker med klienten og behandler forespørgslen, og en ny tråd knyttes til anmodningen. import java.io.*; import java.net.*; public class FlertraadetHjemmesidevaert { public static void main(String arg[]) { try { ServerSocket //værtssokkel = new ServerSocket(8001)// ; while (true) { Socket //forbindelse = værtssokkel.accept()// ; Anmodning //a = new Anmodning(forbindelse)// ; //new Thread(a).start()// ; } } catch (Exception e) { e.printStackTrace(); } } } Resultatet bliver //start// Tue Nov 28 15:37:31 GMT+01:00 2000 GET /xxx.html HTTP/1.0 //start// Tue Nov 28 15:37:38 GMT+01:00 2000 GET /yyy.html HTTP/1.0 //start// Tue Nov 28 15:37:42 GMT+01:00 2000 GET /zzz.html HTTP/1.0 //slut// Tue Nov 28 15:37:42 GMT+01:00 2000 GET /xxx.html HTTP/1.0 //slut// Tue Nov 28 15:37:49 GMT+01:00 2000 GET /yyy.html HTTP/1.0 //start// Tue Nov 28 15:37:50 GMT+01:00 2000 GET /qqq.html HTTP/1.0 //slut// Tue Nov 28 15:37:53 GMT+01:00 2000 GET /zzz.html HTTP/1.0 //slut// Tue Nov 28 15:38:01 GMT+01:00 2000 GET /qqq.html HTTP/1.0 Programmet er afprøvet ved i Netscape at åbne adressen http://localhost:8001/xxx.html hhv. yyy zzz og qqq.html. Man ser, at anmodningerne xxx, yyy og zzz bliver behandlet samtidigt. === 17.2.2. En flertrådet applet med bolde === Lad os lave en applet med nogle bolde, der hopper rundt. Hver bold kører i sin egen tråd. Når en bold oprettes, får den i konstruktøren overført start-koordinater og et Graphics-objekt, som den husker. Den opretter og starter en tråd, som kører boldens run()-metode. import java.awt.*; public class Bold implements Runnable { double x, y, fartx, farty; Graphics g; public Bold(Graphics g1, int x1, int y1) { g = g1; x = x1; y = y1; fartx = Math.random(); farty = Math.random(); //Thread t = new Thread(this);// //t.start();// } public void run() { for (int tid=0; tid<5000; tid++) { //// Tegn bolden over med hvid på den gamle position// g.setColor(Color.white); g.drawOval((int) x, (int) y, 50, 50); //// Opdater positionen med farten// x = x + fartx; y = y + farty; //// Tegn bolden med sort på den nye position// g.setColor(Color.black); g.drawOval((int) x, (int) y, 50, 50); //// ændr boldens fart lidt nedad// farty = farty + 0.1; //// Hvis bolden er uden for det tilladte område skal den// //// rettes hen mod området// if (x < 0) fartx = Math.abs(fartx); if (x > 400) fartx = -Math.abs(fartx); if (y < 0) farty = Math.abs(farty); if (y > 100) farty = -Math.abs(farty); //// Vent lidt// try { Thread.sleep(10); } catch (Exception e) {}; } } } Lad os nu lave en applet med nogle bolde: import java.applet.*; import java.awt.*; public class FlertraadetApplet extends Applet { public void init() { setBackground(Color.white); Graphics g = getGraphics(); new Bold(g, 0, 0); new Bold(g, 50,10); new Bold(g,100,50); new Bold(g,150,90); } } **Figur 17-2. Java** {linuxbog:java:Nordfalk1815465.png} ---- | [[java:java-traade|forrige]] | [[java:index|hjem]] | [[java:java-traade-opgaver|næste]] | | Flertrådet programmering | [[java:java-traade|op]] | Opgaver |