Tentamen Nätverksprogrammering Lösningsförslag

Relevanta dokument
Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

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

Exam Concurrent and Real-Time Programming

Trådar. Aktiva objekt

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

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.

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

10 Kommunikation i Java

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

LÖSNINGSFÖRSLAG

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

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

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

F4. programmeringsteknik och Matlab

Föreläsning 5 Meddelandesändning med TCP

Objektorienterad Programkonstruktion. Föreläsning 11 6 dec 2016

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Föreläsning 3. Stack

Tentamen, EDA501/EDAA20 Programmering M MD W BK L

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Översikt. Skriva och läsa data. Kontrollflöde. Två sorters loopar. For-loop. For-loop

Föreläsning 5 Meddelandesändning med TCP

Hämta data mha URLer Föreläsning 2b. Innehåll Klassen URL

F5 Meddelandesändning med TCP

Java Secure Sockets Extension JSSE. F5 Secure Sockets EDA095 Nätverksprogrammering! Roger Henriksson Datavetenskap Lunds universitet

DI-institutionen Sid 1 av 5 Hans-Edy Mårtensson Sten Sundin Micael Karlsson

OMTENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13: 15

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

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

Recitation 4. 2-D arrays. Exceptions

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

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

Vad kännetecknar en god klass. Vad kännetecknar en god klass. F12 Nested & Inner Classes

Lösningsförslag till tentamen

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

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Tentamen. Lösningsförslag

Dugga i Grundläggande programmering STS, åk

Parallellism, återblick

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

F8 Webbteknologier 1. Dynamiska webbsidor

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

F8 Meddelandesändning med UDP

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

Objektorienterad Programmering (TDDC77)

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Tentamen i Programmering

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

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

Föreläsning 8: Exempel och problemlösning

Lösningar för tenta 2 DAT043,

Preschool Kindergarten

Lösningsförslag till tentamen

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

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

LULEÅ TEKNISKA UNIVERSITET

Datasäkerhet och integritet

Input. Programmering. Andra källor

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

Föreläsning 3. Stack

Generisk klass med typparameter Inre klass - ListIterator

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

DAT043 Objektorienterad Programmering

Föreläsning 3: Booleans, if, switch

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

Lösningsförslag till tentamen Datastrukturer, DAT037,

Lösningsförslag till tentamen

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Lösningsförslag till tentamen

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

Lösningsförslag till exempeltenta 2

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(6) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2015 06 04, 14.00 19.00 Del 1 1. 1) Begäran anländer till webbservern. 2) Om det är första gången som sidan begärs laddas motsvarande.jsp -fil in och kompileras om till en servlet av ett särskilt översättningsprogram. I annat fall går vi direkt till steg 4 nedan. 3) Den nyskapade servleten kompileras av javakompilatorn och startas. 4) Metoden service() anropas av webbservern. Metoden analyserar begäran och skapar HTMLkod som svar. 5) Den producerade HTML-koden laddas ner till klienten. 2. a) Sant b) Falskt c) Falskt d) Falskt e) Sant f) Sant g) Sant h) Falskt 3. HTML defines a markup language that provides a text document with a structure consisting of sections, character styles, internet links, etc. The markup language has the form of brackets, where each bracket has a type:. The format of an opening bracket is <bracket> with the end bracket being: </bracket>. The bracket are called the elements or tags. A HTML document consists of a version information and the root of the document: <html> under which we find the text annotated with the markup elements. An HTML document can be represented as a tree, where the nodes are the HTML elements. Elements may have attributes that provide additional information. The <a> element, describing a string linked to a web page is an example of it that has the href attribute that describes the web page address. HTML parsers can parse documents and produce a parse trees out of them: a hierarchical tree starting at the root element, where the nodes are the HTML elements. HTML parsers can tell if a HTML document is correct and enable programs to traverse, analyze, and transform the tree. The DOM model is a standard representation of HTML documents that enables programs to access the trees. Other parsers can use an event-based mechanism that triggers functions according to the different elements. During the lectures and the labs, we have reviewed two tools to parse HTML documents: 1) one based a built-in java library: HTMLEditorKit, an event-ased parser. It is part of Java, but it has limited parsing capabilities and it is not well documented 2) one based on an external library: jsoup. It is very complete and easy to use, but it requires an external library.

2(6) 4. En klient-server-arkitektur för strömmande media består av: 1) En server som skickar ut ljud eller video med en fördefinierad kodning (t.ex. MPEG) med en viss hastighet (t.ex. 25 bilder/sekund för video) och upplösning (t.ex. 1280x720). 2) En klient som tar emot mediaströmmen, avkodar den och spelar upp den. För att minska effekten av jitter måste klienten läsa in en mängd data innan uppspelning börjar och lagra den i en buffert. Strömmande video kan använda sig av flera olika protokoll: 1) På nätverksnivå är UDP det snabbaste protokollet, men dess populäritet minskar i Amerika och Europa, dock ej i Kina. Det har inget inbyggt stöd för att garantera att data överförs i lagom hastighet. 2) TCP blir alltmer populärt då det har inbyggt stöd för felhantering och att anpassa överföringshastigheten. Vi behöver ett video- eller ljudöverföringsprotokoll ovanpå det rena nätverksprotokollet. 1) RTP är ett standardiserat protokoll som bygger på UDP. 2) HTTP-baserade protokoll som bygger på TCP är moderna alternativ till UDP då de kan använda konventionella HTTP-servrar. DASH och Apples HTTP live streaming är exempel på två sådana protokoll. Arkitekturen bygger på att servern delar upp mediaströmmen i en mängd filer som överförs sekventiellt m.h.a HTTP-protokollet. Klienten hämtar nästa segment med ett GET-kommando som anger var i strömmen denna vill börja strömma media. 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 oberoende av alla andra meddelanden och därför måste destinationsadressen anges för varje meddelande. 6. Busy-wait innebär att en tråd ligger i en loop och väntar på att ett villkor ska bli uppfyllt genom att oavbrutet testa villkoret om och om igen. Detta innebär att den kommer att stjäla CPU-tid från andra trådar som skulle kunna använda tiden till att göra nyttigt arbete och i värsta fall till och med blockra dem helt från att få köra. Ett bättre sätt att vänta på en händelse utan att ta upp värdefull CPU-tid är att använda sig av Javas inbyggda monitorbegrepp och operationerna wait() och notify().

3(6) 7. a) Ömsesidig uteslutning innebär att endast en tråd kan vid varje tillfälle befinna sig inom en och samma s.k. kritiska region, dvs exekvera kod som skulle störa exekveringen av en annan tråds kod (t.ex. genom samtidig manipulering av data eller annan resurs). Om en annan tråd försöker gå in i den kritiska regionen måste denna vänta tills den tråd som befinner sig inom regionen lämnar den. b) Ändra deklarationerna av getvalue() och setvalue() till: public synchronized int getvalue()... public synchronized void setvalue(int newvalue)... c) public synchronized int getvalue() { while (value==0) { try { wait(); catch(interruptedexception e) { int v = value; value = 0; notifyall(); return v; public synchronized void setvalue(int newvalue) { while (value!=0) { try { wait(); catch(interruptedexception e) { value = newvalue; notifyall(); 8. a) Raden sent = input.read(buffer); läser in så många bytes (dock max 128) som finns läsbara från TCP-förbindelsen vid lästillfället (om inga bytes går att läsa blockerar den dock tills minst en byte går att läs). Antalet bytes som läses kan alltså variera från 1 till 128. När vi skriver ut bufferten till output skrivs dock alltid 128 bytes. Har mindre lästs in skrivs det alltså ut ett antal extra bytes innehållande skräp på förbindelsen. b) Torrent-Tore borde ändra utskriften till output.write(buffer,0,sent);. På så sätt skrivs bara de bytes som faktiskt lästes ut.

4(6) Del 2 1) a) Apache/2.2.15 (Red Hat) b) Se kod nedan. c) Se kod nedan. d) Se kod nedan. e) Se kod nedan. 2) a) 256 2 = 65536 b) Om servern svarar precis före timeout i alla lägen kommer det att ta cirka (200 + 200) 65536 millisekunder. Det motsvarar ungefär 7,2 timmar. c) Se kod nedan d) Se kod nedan MonoScan public class MonoScan implements Callable<Boolean> { private ServerStats servercnt; private String base; public MonoScan(String base, ServerStats servercnt) { this.servercnt = servercnt; this.base = base; private String dotaddress2server(string address) { try { InetAddress ipaddr = InetAddress.getByName(address); URL url = new URL("http://" + ipaddr.gethostname()); URLConnection uc = url.openconnection(); uc.setconnecttimeout(200); uc.setreadtimeout(200); uc.connect(); //This is necessary to start the timeout clock String servertype = uc.getheaderfield("server"); // Normally, it should call connect(). See JNP 4, page 189. // On a Mac, this does not seem to be systematic return servertype; catch (SocketTimeoutException e) { return null; catch (IOException e) { return null; private ServerStats scan() throws IOException { for (int i = 0; i < 256; i++) { String dotaddress = base + Integer.toString(i); String server = dotaddress2server(dotaddress); if (server!= null) { servercnt.addserver(server, dotaddress); return servercnt;

5(6) public static void main(string[] args) throws IOException { String base = args[0] + "."; ServerStats servers = new ServerStats(); MonoScan st = new MonoScan(base, servers); st.scan(); servers.print(); public Boolean call() { try { scan(); catch (IOException e) { e.printstacktrace(); return Boolean.TRUE;

6(6) MultiScan.java public class MultiScan { public static void main(string args[]) throws UnknownHostException, InterruptedException, ExecutionException { String base = args[0] + "."; ServerStats servers = new ServerStats(); ExecutorService pool = Executors.newFixedThreadPool(32); List<Future<Boolean>> futures = new ArrayList<>(); for (int i = 0; i < 256; i++) { String address = base + Integer.toString(i) + "."; MonoScan task = new MonoScan(address, servers); Future<Boolean> f = pool.submit(task); futures.add(f); for (Future<Boolean> future : futures) { future.get(); pool.shutdown(); servers.print(); ServerStats.java public class ServerStats { private Map<String, List<String>> servers; public ServerStats() { servers = new TreeMap<>(); public synchronized void addserver(string server, String address) { if (servers.get(server)!= null) { servers.get(server).add(address); else { List<String> addresslist = new ArrayList<>(); addresslist.add(address); servers.put(server, addresslist); public synchronized void print() { for (String server : servers.keyset()) { System.out.println(server + ":\t" + servers.get(server).size());