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

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

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

F8 Meddelandesändning med UDP

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 5 Meddelandesändning med TCP

F9 Meddelandesändning med UDP

F5 Meddelandesändning med TCP

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

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

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

Föreläsning 5 Meddelandesändning med TCP

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

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

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

Tentamen. Lösningsförslag

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

F2 Java I/O - strömmar Meddelandesändning med TCP

DEL 2 - Praktiska programmeringsuppgifter

Föreläsning 14. Filhantering

10 Kommunikation i Java

Fakulteten för ekonomi, kommunikation och IT. Corba. Datum: Mathias Andersson

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Datakommunikation och Internet

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

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

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

LÖSNINGSFÖRSLAG

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

Språkkonventioner och redigering av tal.

Lösningar för tenta 2 DAT043,

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.

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

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

Java och nätverk Läsanvisningar Skansholm (med Swing) kapitel 18 Budd kapitel 22

Lösningsförslag till tentamen i EDAF25 Objektorienterad modellering och design Helsingborg

Föreläsnings 9 - Exceptions, I/O

Lösningsförslag till tentamen

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.

F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Nätverksprogrammering

F1 Nätverk och meddelandesändning

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

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

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

Föreläsning 11 Aktiva objekt och trådar, strömmar, kommunikation DAT043,

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

Lösningsförslag till tentamen

Laborationer, moment 4 5

Trådar. Aktiva objekt

DAT043 Objektorienterad Programmering

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

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

Laborationer, moment 4 5

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Lösningsförslag tentamen FYTA11 Java

Tentamen Lösningar EDA698 Realtidssystem

Lösningsförslag till tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

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

Tentamen. DD2385 Programutvecklingsteknik vt 2013 Onsdagen den 22 maj 2013 kl Hjälpmedel: penna, suddgummi, linjal

Lösningsförslag till exempeltenta 2

Java-programmering. GUI-exempel. WindowTest.java. Händelsestyrt. WindowTestGUI.java (forts) WindowTestGUI.java. GUI UDP TCP Trådar Laboration 2 Tips

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

Trådar och trådsäkerhet. Objekt-orienterad programmering och design Alex Gerdes, 2018

Tentamen OOP

F4. programmeringsteknik och Matlab

OOP Objekt-orienterad programmering

TENTAMEN OOP

OOP Objekt-orienterad programmering

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

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Malmö högskola 2008/2009 CTS

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Exam Concurrent and Real-Time Programming

9 Aktiva objekt och trådar

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

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

Föreläsning 3. Stack

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

Objektorienterad Programmering (TDDC77)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

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

TENTAMEN OOP

Tentamen , Introduktion till Java, dtaa98, dtea53

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2014 06 02, 8.00 13.00 Del 1 1. a) TCP (Transmission Control Protocol) och UDP (User Datagram Protocol). b) Protokollen i transportlagret erbjuder funktioner för att överföra generella data, t.ex. i form av bytes, utan att göra någon tolkning av betydelsen av den data som överförs. 2. a) Sant b) Falskt c) Falskt d) Sant e) Falskt f) Falskt g) Sant h) Sant 3. Låt servern vara flertrådad och låt en tråd sköta uppkopplingar. När en uppkoppling sker skapas en ny tråd som tar hand om den nya uppkopplade klienten. När klienten kopplar ned avslutas tråden. Den första tråden återgår till att vänta på nya uppkopplingar så fort den nya klienttråden skapats. Fördelen är att flera klienter kan hanteras samtidigt. En nackdel vid väldigt hög trafik till servern kan vara att det kan vara resurskrävande att hela tiden starta nya trådar för varje ny uppkoppling. Låt servern bestå av en tråd som tar emot nya uppkopplingar och lägger in dem i en kö. Så fort information om den nya uppkopplingen lagts in i kön återgår tråden till att vänta på nya uppkopplingar. Uppkopplingarna hanteras av pool bestående av ett fixt antal trådar som tar hand om de uppköade uppkopplingarna i tur och ordning. Fördelen med denna lösning är att flera uppkopplingar kan hanteras parallellt, men vi slipper kostnaden för att hela tiden skapa nya trådar. Storleken på trådpoolen måste dock bestämmas så att bra prestanda erhålls.

2(7) 4. public class Account { /* Saldo. Anges i ören för att undvika avrundningsfel. */ private long balance; public synchronized long getbalance() { return balance; public synchronized void withdraw(long amount) { balance = balance-amount; public synchronized void deposit(long amount) { balance = balance+amount; % Insättning account.deposit(sum); % Uttag account.withdraw(sum); 5. a) Det är inte säkert att read kommer att läsa in 100 bytes. Det beror på hur mycket data som har hunnit anlända via nätverket. b) int bytestoread = 100; int bytesread = 0; while(bytesread<bytestoread) { int result = input.read(buffer,bytesread,bytestoread-bytesread); if (result==-1 break; bytesread += result; 6. public class WaitingThread extends Thread { private boolean finished = false; public void synchronized releasethread() { finished = true; notify(); private synchronized void awaitrelease() { while (!finished) { wait(); catch(interruptedexception e) { public void run() {... /* Wait for computation to finish. */ awaitrelease(); /* The external thread has now finished its computation */...

3(7) 7. a) Ursprungligen använde man objekt som motsvarade strömmar (klasserna InputStrem/OutputStream) för att läsa och skriva data. I det nya paketet arbetar man i stället med buffertar som man fyller med data innan man begär att innehållet skickas. För att ta emot data begär man att data ska läsas in till en buffert som man sedan kan hämta data ifrån. b) 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 det möjligt att hantera flera öppna förbindelser samtidigt utan att använda sig av flera trådar. c) Ett objekt av klassen Selector används för att registrera vilka förbindelser (och händelser på dessa) som man vill bevaka. Sedan anropar man 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.

4(7) Del 2 1. Nätverksbaserat bokningssystem BookingClient.java import java.net.*; import java.io.*; public class BookingClient { private static final PORT_NO = 7878; public static void main(string [] args) { Socket sock = new Socket(args[0],PORT_NO); DataInputStream di = new DataInputStream(sock.getInputStream()); DataOutputStream do = new DataOutputStream(sock.getOutputStream()); do.writeutf(args[1]); // Write command do.writeutf(args[2]); // Write resource name // Send additional arguments. No further data to be sent for create. if (args[1].equals("book") { do.writeutf(args[4]); // Write start time do.writeutf(args[5]); // Write end time do.writeutf(args[6]); // Write description else if (args[1].equals("delete") { do.writeutf(args[4]); // Write start time else if (args[1].equals("show") { else if (args[1].equals("watch") { do.flush(); // Receive response while (true) { String s = di.readutf(); system.out.println(s); catch(eofexception IOException UTFDataFormatException ex) { catch(ioexception e { System.out.println("I/O Error - terminating"); System.exit(1);

5(7) BookingServer.java import java.net.*; import java.io.*; class SyncBM { private BookingManager bm = new BookingManager(); public synchronized boolean create(string name) { return bm.create(name); public synchronized boolean book(string resource, String date, String start_time, String end_time, String description) { notifyall() return bm.book(resource,date,start_time,end_time,description); public synchronized boolean delete(string resource, String start_date, String end_date) { notifyall() return bm.delete(resource,start_date,end_date); public synchronized String[] show(string resource, String date) { return bm.show(resource,date); public synchronized String[] awaitchangedschedule(string resource, String date, String[] schedule) { String[] new_schedule = bm.show(resource,date); while(arrays.equals(schedule,new_schedule)) { wait(); catch(interruptedexception e) { new_schedule = bm.show(resource,date); return new_schedule = bm.show(resource,date); class ClientHandler extends Thread { private Socket socket; private SyncBM bm; public ClientHandler(Socket socket, SyncBM bm) { this.socket = socket; this.bm = bm; public void run() { DataInputStream di = new DataInputStream(socket.getInputStream()); DataOutputStream do = new DataOutputStream(socket.getOutputStream()); String command = di.readutf(); String resource = di.readutf();

6(7) if (command.equals("create")) { if (bm.create(resource)) { do.writeutf("new resource created successfully."); else { do.writeutf("resource creation failed."); else if (command.equals("book")) { String start = di.readutf(); String end = di.readutf(); String descr = di.readutf(); if (bm.book(resource,date,start,end,descr)) { do.writeutf("booking succeeded."); else { do.writeutf("booking failed."); else if (command.equals("delete")) { String start = di.readutf(); if (bm.delete(resource,date,start)) { do.writeutf("deletion succeeded."); else { do.writeutf("deletion failed."); else if (command.equals("show")) { String[] schedule = bm.show(resource,date); for(int i=0;i<schedule.length;i++) { do.writeutf(schedule[i]); else if (command.equals("show")) { String[] schedule = bm.show(resource,date); while (true) { for(int i=0;i<schedule.length;i++) { do.writeutf(schedule[i]); schedule = bm.awaitchangedschedule(resource,date,schedule); s.close(); catch(eofexception IOException UTFDataFormatException ex) { public class BookingServer { private static final PORT_NO = 7878; public static void main(string[] args) { SyncBM bm = new SyncBM(); ServerSocket ss = new ServerSocket(PORT_NO); while(true) { Socket s = ss.accept(); new ClientHandler(s,bm).start(); catch(ioexception e { System.out.println("I/O Error - terminating"); System.exit(1);

7(7) 2. Adressöversättning public class URLMapper { /** Translates the symbolic internet addresses in name_list into IP number form (as strings). Returns a list with the translated addresses. */ public static List<String> mapper(list<string> name_list) throws InterruptedException, ExecutionException { List<MapURLTask> tasks = new ArrayList<>(); for (int j = 0; j < 3; j++) { List<String> sublist = new ArrayList<>(); for (int i = 0; i < urllist.size(); i++) { if (i % 3 == j) { sublist.add(urllist.get(i)); tasks.add(new MapURLTask(sublist)); ExecutorService service = Executors.newFixedThreadPool(3); Future<List<String>> future1 = service.submit(tasks.get(0)); Future<List<String>> future2 = service.submit(tasks.get(1)); Future<List<String>> future3 = service.submit(tasks.get(2)); List<String> i1 = future1.get(); List<String> i2 = future2.get(); List<String> i3 = future3.get(); service.shutdown(); i1.addall(i2); i1.addall(i3); return i1; class MapURLTask implements Callable<List<String>> { private List<String> urllist; MapURLTask(List<String> urllist) { this.urllist = urllist; public List<String> call() { List<String> iplist = new ArrayList<>(); for (String url : urllist) { InetAddress ia = InetAddress.getByName(url); iplist.add(ia.gethostaddress()); catch (UnknownHostException e) { return iplist;