Tentamen Nätverksprogrammering Lösningsförslag

Relevanta dokument
Tentamen Nätverksprogrammering Lösningsförslag

Tentamensskrivning Nätverksprogrammering (EDA095 - FED) , kl 8-13

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamensskrivning Nätverksprogrammering (EDA095) , kl 8-13

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

DEL 2 - Praktiska programmeringsuppgifter

FÖRSLAG TILL LÖSNINGAR FÖR TENTAMEN I INTERNETPROGRAMMERING MED JAVA, 5p för SY , kl

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Concurrency Saker händer samtidigt. Process En instans av ett program

F8 Meddelandesändning med UDP

Transport Layer. Transport Layer. F9 Meddelandesändning med UDP EDA095 Nätverksprogrammering. Java och UDP TCP/UDP

Tentamen. Lösningsförslag

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Exam Concurrent and Real-Time Programming

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

F9 Meddelandesändning med UDP

10 Kommunikation i Java

DI-institutionen Sid 1 av 6 Hans-Edy Mårtensson Sten Sundin

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Lösningar för tenta 2 DAT043,

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin Micael Karlsson

Att skriva till och läsa från terminalfönstret

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen Lösningar EDA698 Realtidssystem

LÖSNINGSFÖRSLAG

Tentamen, EDAA10 Programmering i Java

Tentamen, EDA501 Programmering M L TM W K V

Tentamen, EDAA20/EDA501 Programmering

Tentamen LÖSNINGSFÖRSLAG. c) Tilldelningen C x = new D() ger kompileringsfel eftersom klassen D är abstrakt.

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Lösningsförslag till exempeltenta 2

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Tentamen EDA698 Realtidssystem (Helsingborg)

Tentamen, EDA501 Programmering M L TM W K V

Tung bakgrundsaktivitet t.ex. Aktiva objekt t.ex. Animering, simulering. DD2385 Programutvecklingsteknik Några bilder till föreläsning 9 6/5 2013

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!

DAT043 Objektorienterad Programmering

Tentamen, EDAA20/EDA501 Programmering

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Tentamen, Algoritmer och datastrukturer

Surfning. Webbklienter och webbservrar. Specialskrivna webbservrar. Kommunikation med sockets

Malmö högskola 2008/2009 CTS

Tentamen i Algoritmer & Datastrukturer i Java

FÖRSLAG TILL LÖSNINGAR, TENTAMEN I IKB007 INTERNETPROGRAMMERING MED JAVA, 5p för SY2, , kl

Språkkonventioner och redigering av tal.

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Tentamen ITK:P2. Inga hjälpmedel tillåtna förutom penna och papper. Skriv tydligt och texta gärna. 14 st frågor, 70 poäng.

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lösningsförslag till tentamen

Lösningsförslag till tentamen i EDA011, lördagen den 16 december 2006

OOP Objekt-orienterad programmering

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Föreläsning 3-4 Innehåll

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

Tentamen, EDAA20/EDA501 Programmering

Tentamen i Programmering

Interface. Interface. Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 3 december 2010

/* * * Lösningsförslag tentamen DIT950 * Datum * */ /* * -1 - */ För samtliga gäller,se föreläsningsanteckningar.

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

F1 Nätverk och meddelandesändning

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Objektorienterad Programkonstruktion. Föreläsning 2 2 nov 2016

Lösningsförslag till tentamen

Lösningsförslag till exempeltenta 1

Föreläsning 14. Filhantering

Programmering för språkteknologer II, HT2014. Rum

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Lösningsförslag till tentamen

Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.

Tentamen OOP

Trådar. Aktiva objekt

F8 Webbteknologier 1. Dynamiska webbsidor

Subklasser och arv Inledning till grafik (JFrame och JPanel). Något om interface. Objektorienterad programvaruutveckling GU (DIT011) Subklasser

public boolean containskey(string key) { return search(key, head)!= null; }

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Tentamen i Objektorienterad programmering

Malmö högskola 2007/2008 Teknik och samhälle

TDDD78 Viktiga begrepp, del 2

Lösningsförslag till tentamen

a. Vilka av följande påståenden är riktiga? Observera att felaktigt valda påståenden ger poängavdrag. (4p)

JAVAUTVECKLING LEKTION 4

Lösningsförslag till tentamen

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2012 05 28, 8.00 13.00 Del 1 1. Time To Live (TTL) anger hur många routrar ett multicastpaket får passera innan det tas bort. Det används för att begränsa spridningen av meddelanden till en begränsad del av nätverket. 2. Den s.k. MIME-taggen används för att tala om vilken typ av innehåll ett dokument har, t.ex. htmlkod i textform eller en JPEG-bild. 3. Både SAX och DOM är XML-parsrar, men fungerar lite annorlunda. DOM bygger upp ett träd som representerar XML-dokumentet på vilket man sedan kan utföra godtyckliga operationer (på hela eller delar av trädet) medan SAX inte sparar någon fullständig representation av dokumentet. I det senare fallet kan man utföra operationer efterhand som parsern stöter på de olika taggarna. 4. Busy-wait innebär att en tråd förbrukar all tillgänglig CPU-tid för att vänta på att en händelse ska inträffa, t.e.x att en annan tråd ändrar ett värde. Det leder till dåligt processorutnyttjande och dåliga prestanda. 5. Ett kopplat protokoll, såsom TCP, upprättar en (tänkt) fast förbindelse mellan de två kommunicerande noderna över vilken alla meddelanden sedan går. Man behöver alltså inte ange för varje enskilt meddelande vart det ska skickas. Ett okopplat protokoll, såsom UDP, behandlar varje meddelande som helt oboroende av alla andra meddelanden och därför måste destinationsadressen anges för varje meddelande. 6. I java.nio infördes en mekanism som gör det möjligt för en tråd att vänta på att det ska kunna gå att utföra I/O på någon av flera angivna strömmar. Det går till som så att tråden kopplar (registrerar) varje ström som den är intresserad av till en Selector. Den anger också vilken typ av I/O den är intresserad av att kunna utföra (täsning, skrivning, etc). Sedan anropar tråden metoden select i Selector-objektet. Tråden blockeras då ända tills det går att utföra I/O på någon av de registrerade trådarna utan att I/O-anropet blockeras. Tråden får efter select-anropet information om på vilka strömmar det går att utföra I/O och kan beta av dessa i tur och ordning. Därefter kan den utföra ett nytt select-anrop, osv. 7. a) URI = Uniform Resource Identifier, URL = Uniform Resource Locator b) En URI är ett generellt sett att namnge en resurs, men den talar inte nödvändigtvis om hur resursen ska kunna nås via nätverket. En URL identifierar däremot explicit hur en resurs ska kunna nås via nätverket samtidigt som den naturligtvis fungerar som en ren identifikation. En URL kan därför betraktas som ett specialfall av det mer generella begreppet URI.

2(6) 8. 1) Sant 2) Falskt 3) Falskt 4) Sant 9. 1) Det som skickas över TCP-ström är en sekvens av bytes (som representerar tecken i vårt fall). Problemet är att det finns inget sätt att avgöra var i strömmen det första kommandot slutar och var det andra börjar. Det som skickas över förbindelsen är alltså STARTLEFTöch det är inte väldefinierat vad anropen av read kommer att returnera. Det första anropet av read kan mycket väl returnera STARTLEFT", STA", STARTLE"eller något liknande. 2) Idé: Vi lägger till ett radslutstecken som signalerar slutet på ett kommando. os.write("start\n".getbytes()); os.write("leftn".getbytes()); os.flush(); byte[] buffer = new byte[128]; // Inga meddelanden > 128 bytes while(true) { int len = 0; int c = is.read(); while(c!= \n && c!=-1) { buffer[len++] = c; c = is.read(); String mess = new String(buffer,0,len); performcommand(mess); 10. Båda teknikerna är javabaserade tekniker som används för att skapa dynamiskt webbinnehåll på serversidan. En servlet implementeras som en klass i Java vilken genererar HTML-kod när den anropas. I JSP skjuter man i stället in fragment av javakod i HTML-koden för en sida. En JSPspecifikation kompileras automatiskt om till en servlet av webbservern när den anropas första gången. 11. 1) Falskt 2) Sant 3) Falskt 4) Falskt

3(6) Del 2 1. Buddylist Vi förutsätter nedan att lämpliga paket importerats (inget poängavdrag för saknad import): import java.net.*; import java.io.*; a) class BuddyRequester extends Thread { BuddyWindow bw; MulticastSocket ms; public BuddyRequester(MulticastSocket ms,buddywindow bw) { this.ms = ms; this.bw = bw; byte[] message = new byte[1]; message[0] = 0; InetAddress ia = InetAddress.getByName("experiments.mcast.net"); DatagramPacket dp = new DatagramPacket(message,message.length,ia,56666); bw.clear(); ms.send(dp); sleep(60000); catch (InterruptedException e) { catch(ioexception e) { b) class BuddyServer extends Thread { String nick; MulticastSocket ms; DatagramSocket ds; public BuddyServer(MulticastSocket ms,datagramsocket ds,string nick) { this.ms = ms; this.ds = ds; this.nick = nick;

4(6) byte[] message = new byte[65536]; DatagramPacket dp = new DatagramPacket(message,message.length); ms.receive(dp); byte[] m = nick.getbytes(); DatagramPacket reply = new DatagramPacket(m,m.length,dp.getAddress(),56667); ds.send(reply); catch(ioexception e) { c) class BuddyListener extends Thread { BuddyWindow bw; String nick; DatagramSocket ds; public BuddyListener(DatagramSocket ds,buddywindow bw) { this.ds = ds; this.bw = bw; byte[] message = new byte[65536]; DatagramPacket dp = new DatagramPacket(message,message.length); ds.receive(dp); if (dp.getlength()>0) { byte[] m = dp.getdata(); String nick = new String(m); nick = nick+" ("+dp.getaddress().gethostname()+")"; bw.addbuddy(nick); catch(ioexception e) {

5(6) d) public class BuddyList { public static void main(string [] args) { if (args.length!=1) { System.err.println("Syntax: java BuddyList <NickName>"); BuddyWindow bw = new BuddyWindow(); MulticastSocket ms = null; DatagramSocket ds = null; ms = new MulticastSocket(56666); InetAddress ia = InetAddress.getByName("experiments.mcast.net"); ms.settimetolive(1); ms.joingroup(ia); ds = new DatagramSocket(56667); catch(ioexception e) { new BuddyRequester(ms,bw).start(); new BuddyServer(ms,ds,args[0]).start(); new BuddyListener(ds,bw).start(); 2. Filtrering av sensorvärden public class SensorFilter { private double [] value = new double[3]; private boolean [] filled = new boolean[3]; public SensorFilter() { /* No code required */ public synchronized void putvalue(int id, double val) { while (filled[id]) { wait(); catch (InterruptedException e) { filled[id] = true; value[id] = val; notifyall(); public synchronized double getmedian() { while (!filled[0]!filled[1]!filled[2]) { wait(); catch (InterruptedException e) { for(int i=0;i<3;i++) { filled[i] = false; Arrays.sort(value): notifyall(); return value[1];