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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

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

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 5 Meddelandesändning med TCP

F5 Meddelandesändning med TCP

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

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

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

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

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

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

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

Föreläsning 5 Meddelandesändning med TCP

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

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

Objektorienterad Programkonstruktion. Föreläsning 10 7 dec 2015

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

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

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

Tentamen. Lösningsförslag

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.

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

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

Lösningar för tenta 2 DAT043,

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Undantag. Engelska: exceptions. Skansholm: exceptionella händelser

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

Klasser som datastrukturer

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 3. Stack

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

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

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

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

10 Kommunikation i Java

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

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

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

TDDD78 Viktiga begrepp, del 2

JAVASCRIPT. Beteende

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

Lösningsförslag till exempeltenta 2

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

Föreläsning 3-4 Innehåll

F8 Meddelandesändning med UDP

Datakommunikation och Internet

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

Tentamen EDA698 Realtidssystem (Helsingborg)

Trådar. Aktiva objekt

Föreläsning 1. På klientsidan... Allmänt. På serversidan... Och dessutom... DD1389 Internetprogrammering 6 hp

Classes och Interfaces, Objects och References, Initialization

DAT043 Objektorienterad Programmering

Exemple på Tentauppgifter Webbprogrammering

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

Tentamen Lösningar EDA698 Realtidssystem

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

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

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

Lösningsförslag till tentamen

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Föreläsning 14. Filhantering

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad Programmering (TDDC77)

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Tentamen, EDAA10 Programmering i Java

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

DIAGNOSTISKT PROV. Tid. Hjälpmedel. Antaganden. Rättning. Övrigt. Diagnostiskt Prov. Klockan Inga

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(7) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2018 04 11, 8.00 13.00 Del 1 1. a) IP-numret identifierar en enskild dator på internet. b) Port-numret anger vilken tjänst/program som paketen ska skickas till. c) DNS är en tjänst som omvandla namn till IP-nummer, t.ex. cs.lth.se 130.235.97.220. Portnumret fås antingen genom defaulvärde för protokollet, http 80, eller så anges det explicit i url:en http://cs.lth.se:8080/edaf65. 2. Trådar läggs i tillståndet waiting när de anropar sleep(time). De flyttas sedan till tillståndet ready efter en viss tidpunkt. Trådar läggs i tillståndet blocked när de tvingas vänta på att komma in i monitorn vid anropar til en monitor-metod, d.v.s. en metod som är synchronized. Detta inträffar när monitorn ägs av en annan tråd. 3. a) Kaka lagrar text, strängar. Max storlek på en kaka är 4KB. Applikationen bestämmer själva semantiken för texten. b) En kaka är kopplad till en domän, t.ex. cs.lth.se. När en http-request kommer från den domänen skickar http-serven automatiskt kakan till webb-läsaren som ett http-header-attribut i svaret. 4. a) Varje tecken har en unik unicode key point, d.v.s. det är ett värde som identifierar ett tecken. För basic lattin är key point samma som ascii-koden (0x00 0x7F). b) UTF-8 variabel länd kodning. Varje tecken är 1-4 bytes. Tecknen med key point U-0000 U-007F lagras i en byte. Tecknen med key point U-0080 U-07FF lagras i två bytes. Den första byten inleds med bitarna 110, följt av 5 bitar från key point värdet. Byte två inleds med 10 följt av 6 bitar från key point värdet. På samma sätt används tre bytes för key point värden U-0800 U-FFFF (1110xxxx 10xxxxxx 10xxxxxx) och fyra bytes för resten (11110xxx 10xxxxxx 10xxxxxx 10xxxxxx. 5. a) falskt UDP garanterar inte att paketen kommer fram, men innehållet i paket som gör det är korrekt. b) sannt I ett XML-dokument finns bara ett element på översta nivån. c) falskt Man måste normalt även använda wait() och notifyall() för att undvika busy wait. d) sannt Både XML och JSON är textbaserade format som kan användas för att skicka information mellan en server och en klient. e) falskt TCP-paket kan skickas till port alla portar. f) falskt En css-fil kan inte innehålla JavaScript. 6. Betrakta JavaScript-koden (3p)

2(7) a) Operationen === utför ingen typkonvertering, d.v.s. returnerar true on både värde och typ är samma. Operationen == utför typkonvertering innan värdet jämförs. 3.14 === 3.14 är falskt medans 3.14 == 3.14 är sant. b) Block scope (let presentone) innebär att variabeln är synlig inom det blocket den är deklarerad (samma som i Java). Function scope (var presenttwo) innebär att variabeln är synlig i hela funktionen. c) Document Object Model(DOM) är ett träd som representerar hemsidan (html och css). Det är DOMen som webbläsaren renderar. 7. a) Om det sker både en insättning och uttag på ett konto samtidigt uppstår kapplöpning mellan get/set-anropen från Communication. b) public class Account { private String accountnbr; private double balance; synchronized public void withdraw(double amount) { this.balance = balance - amount; synchronized public double deposit(double amount) { this.balance = balance + amount; (2p) * More code that is not relevant for this question * public class Communication extends thread { private Bank bank; public Communication(Bank bank){ this.bank = bank; public void run(){ // The code for communication with ATM, mobile app and webb private void withdraw(double amount, String accountnbr){ Account account = bank.findaccount(accountnbr); account.withdraw(amount); private void deposit(double amount, String accountnbr){ Account account = bank.findaccount(accountnbr); account.withdraw(amount);

3(7) Del 2 Budgivning 1. Att lämna bud och att lystna efter nya bud görs på olika portar. lämna bud Klienten kopplar upp sig och skickar objektid följt av amount i det format som Javas DataOutput- Stream använder för int. Serven svarar sedan med true/false i det format som Javas DataOutput- Stream använder för boolean. Serven stänger uppkopplingen efter att ha skickat sitt svar. lyssna efter nya bud Klienten kopplar upp sig mot serven. Serven håller kopplingen uppe och skickar alla accepterade bud till klienten, samma format som ovan (objektid följt av amount i det format som Javas DataOutputStream använder för int). Serven svarar sedan med true/false i det format som Javas DataOutputStream använder för boolean. Serven stänger uppkopplingen efter att ha skickat sitt svar. implementering public class Bid { static final int biddistributionport = 9001; static final int makebidport = 9000; public int objectid; public int amount; Bid(){ Bid(int objectid, int amount){ this.objectid = objectid; this.amount = amount; static Bid read(datainputstream dis) throws IOException{ Bid result = new Bid(); result.objectid = dis.readint(); result.amount = dis.readint(); return result; public void write(dataoutputstream dos) throws IOException { dos.writeint(objectid); dos.writeint(amount); dos.flush(); int getobjectid(){ return objectid; int getamount(){ return amount;

4(7) public class AuctionCommunication { static final String url = "auction.com"; Socket socket; DataInputStream fetcheris; public AuctionCommunication(){ socket = new Socket(url, Bid.bidDistributionPort); fetcheris = new DataInputStream(socket.getInputStream()); catch (IOException e) { public boolean sendnewbid(bid bid) throws UnknownHostException, IOException { try(socket sock = new Socket(url, Bid.makeBidPort)) { DataOutputStream dos = new DataOutputStream(sock.getOutputStream()); DataInputStream dis = new DataInputStream(sock.getInputStream()); bid.write(dos); return dis.readboolean(); public Bid awaitnewbid() throws IOException { return Bid.read(fetcherIS); public void close() throws IOException { if(socket!= null &&!socket.isclosed()) { socket.close(); public class ServerMain { public static void main(string[] args) { new ServerMain(); public ServerMain() { // monitors BidFIFO fifo = new BidFIFO(); ClientList clients = new ClientList(); // threads for distributing bids new BidListenerManager(clients).start(); new BidDistributor(fifo, clients).start(); // code for receiving new bids try(serversocket serversocket = new ServerSocket(Bid.makeBidPort)){ while(true) { Socket socket = serversocket.accept(); new BidReceiver(fifo, socket).start(); catch (IOException e) {

5(7) * Queue bids for distributed to all clients. * When a new bid is offered, this monitor checks if it is accepted. class BidFIFO { Queue<Bid> fifo = new LinkedList<Bid>(); Auctioneer auctioneer = new Auctioneer(); synchronized public boolean offernewbid(bid bid) { boolean accepted = auctioneer.makebid(bid); if(accepted) { fifo.add(bid); notifyall(); return accepted; synchronized public Bid awaitnewbid() { while( fifo.isempty() ) { wait(); catch (InterruptedException e) { return fifo.remove(); * Receive a new bid from a client. * Manage the network communication. * Closes the socket after replying to the client. class BidReceiver extends Thread { private BidFIFO mon; private Socket socket; BidReceiver(BidFIFO mon, Socket socket) throws IOException { this.mon = mon; this.socket = socket; public void run() { DataInputStream dis = new DataInputStream(socket.getInputStream()); DataOutputStream dos = new DataOutputStream(socket.getOutputStream()); Bid bid = Bid.read(dis); boolean accepted = mon.offernewbid(bid); dos.writeboolean(accepted); socket.close(); catch (IOException e) {

6(7) * Keeps track of all connected clients. * Sends new bids to all clients class ClientList { ArrayList<DataOutputStream> clients = new ArrayList<DataOutputStream>(); synchronized public void addclient(dataoutputstream dos) { clients.add(dos); synchronized public void distributenewbid(bid bid) { ArrayList<DataOutputStream> closedconnections = new ArrayList<DataOutputStream>(); for(dataoutputstream dos: clients) { bid.write(dos); catch (IOException e) { closedconnections.add(dos); for(dataoutputstream dos: closedconnections) { clients.remove(dos); * Accepts new clients for bid distribution class BidListenerManager extends Thread { private ClientList clients; BidListenerManager(ClientList clients) { this.clients = clients; public void run() { try(serversocket serversocket = new ServerSocket(Bid.bidDistributionPort)) { while(true) { Socket socket = serversocket.accept(); clients.addclient(new DataOutputStream(socket.getOutputStream())); catch (IOException e) {

7(7) * Send the bids to all known clients class BidDistributor extends Thread { private BidFIFO bidqueue; private ClientList clients; BidDistributor(BidFIFO bidqueue, ClientList clients) { this.bidqueue = bidqueue; this.clients = clients; public void run() { while(true) { Bid bid = bidqueue.awaitnewbid(); clients.distributenewbid(bid);