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) , kl 8-13

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

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

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

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

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

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

Trådar. Aktiva objekt

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

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

Föreläsning 5 Meddelandesändning med TCP

F5 Meddelandesändning med TCP

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

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

Tentamen. Lösningsförslag

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)

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

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

Lösningsförslag till tentamen i OOP, HI1027 Fredag 21 oktober 2011

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

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

Datakommunikation och Internet

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

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

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.

Tentamen, EDAA10 Programmering i Java

Föreläsning 5 Meddelandesändning med TCP

10 Kommunikation i Java

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Malmö högskola 2008/2009 CTS

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

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

Exam Concurrent and Real-Time Programming

Tentamen EDA698 Realtidssystem (Helsingborg)

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Objektorienterad programutveckling, fk

Föreläsning 14. Filhantering

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

F1 Nätverk och strömmar

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

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

Lösningsförslag till tentamen

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

TENTAMEN OOP

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.

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

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

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

Nätverksprogrammering. Tekniker för att skriva program som kommunicerar med varandra över ett nätverk. F1 Nätverk och strömmar.

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

Trådar. Motivering. Många program måste kunna hålla på med flera saker samtidigt, till exempel. fleranvändarsystem.

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

Lösningar för tenta 2 DAT043,

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

JAVAUTVECKLING LEKTION 4

Lösningsförslag till tentamen

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

LÖSNINGSFÖRSLAG

F8 Meddelandesändning med UDP

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Lösningsförslag till tentamen

Tentamen, EDAA20/EDA501 Programmering

Chapter 4: Writing Classes/ Att skriva egna klasser.

Lösningsförslag till tentamen

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

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

DAT043 Objektorienterad Programmering

9 Aktiva objekt och trådar

Föreläsning 1 Nätverk och strömmar

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

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

Tentamen, EDA501 Programmering M L TM W K V

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

Lösningsförslag till exempeltenta 2

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

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

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

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.

Lösningsförslag till tentamen

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

2I1073 Lektion 2. Lektion 2a. Lektion 2a. Servlets, säkerhet, och filhantering. import java.io.*; import javax.servlet.*; import javax.servlet.http.

Transkript:

LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen Nätverksprogrammering Lösningsförslag 2018 03 14, 8.00 13.00 Del 1 1. Applikationslagret levererar data mellan applikationer och till användaren (de tre undre lagren hanterar kommunikation mellan datorer). Exempel på protokoll är HTTP. Transportlagret ansvarar för en pålitlig kommunikation. Protokollet TCP är mest pålitligt: alla paket kommer fram, de kommer fram i samma ordning som de skickades och datan har inte förändrats under överföringen. UDP garanterar bara att datan inte har förändrats (paket kan tappas eller komma fram i annan ordning). 2. Kapplöpning kan uppstå när ett program har flera trådar (parallella aktiviteter). Om programmets korrekthet är beroende på vilken ordning operationer görs och den rätta ordningen inte garanteras uppstår kapplöpning. Lösningen är att synkronisera trådarna för att garantera en korrekt ordning. Detta görs normalt med monitorer. Ett exempel: class Bank{ private double balance; synchronized void deposit(double amount){ balance = balance + amount; synchronized void withdraw(double amount){ balance = balance - amount; Utan synkronisering kan ett trådbyte ske (och därmed ändring av värdet på balance) efter att balance lästs, men innan det uppdaterade värdet skrivs till attributet. 3. REST api a) REST använder HTTP för kommunikation. b) REST-operationen anges genom HTTP-protokollet. HTTPs operationerna GET/POST/PUT/- DELETE indikerar läsa/skapa/uppdatera/ta bort. c) I svaret på ett HTTP-anrop anges en statuskod. Denna statuskod används i REST för att indikera hurvida REST-operationen lyckades eller inte. d) Resurser/objekt identifieras genom en URL i REST-anropet. 4. a) falskt - en url får bara innehålla tecken från 7-bitars ASCII, vilket å inte gör. Även mellanslag är förbjudna i url:er. b) falskt - url är en del mängs av uri.

2(5) c) falskt - TCP är alltid dubbelriktad, både in- och ut-strömmen på en port är bundna till TCPprotokollet. d) falskt - XML stödjer bara text. e) falskt - normalt kan bara javascript exekveras i webbläsaren. 5. Buffrade strömmar a) Buffring ökar normalt prestandan då färre paket skickas över nätverket (högre bandbredd, men ökade fördröjningar) b) Buffring innebär att data lagras i en buffert tills den blir full. Detta skapa problem om applikationen skickar små meddelanden som behöver komma fram snabbt, t.ex. i en chattprogram. Det kan även uppstå problem om det finns en dialog mellan servern och klienten. Senario: en webb-server begär inloggningsuppgifter från webbläsaren som del av ett http-anrop. Om authenticate texten fastnar i en buffert på servern kommer klienten aldrig att se det och kommunikationen hänger sig. Lösningen är att använda metoden flush() som skickar paket, även om det inte är fullt. 6. a) Lösningen innehåller en bussy wait. När bakgrundstråden anropar pause() fortsätter den använda CPU-tid för att exekvera while-loopen b) public class PauseControl { private boolean paused = false; synchronized public void setpause(boolean state) { paused = state; notifyall(); synchronized public void pause() { while(paused) { wait(); catch (InterruptedException e) {

3(5) Del 2 High Score 1. public class HiScoreCommunication { static final String url = "scoreserver.megagames.se"; static final int fetchport = 9001; static final int updateport = 9000; Socket socket; DataOutputStream fetcheros; DataInputStream fetcheris; public HiScoreCommunication(){ socket = new Socket(url, fetchport); fetcheros = new DataOutputStream(socket.getOutputStream()); fetcheris = new DataInputStream(socket.getInputStream()); catch (IOException e) { public void sendnewscore(hiscore score) throws UnknownHostException, IOException { try(socket sock = new Socket(url, updateport)) { DataOutputStream dos = new DataOutputStream(sock.getOutputStream()); dos.writeint(score.score); dos.writeutf(score.name); dos.flush(); public HiScore awaitnewhiscore(int oldscore) throws IOException { fetcheros.writeint(oldscore); fetcheros.flush(); int score = fetcheris.readint(); String name = fetcheris.readutf(); return new HiScore(score, name); public void close() throws IOException { if(socket!= null &&!socket.isclosed()) { socket.close(); public class ServerMain { static final int fetchport = 9001; public static void main(string[] args) { ScoreMonitor mon = new ScoreMonitor(); new ScoreUpdateThread(mon).start(); try(serversocket serversocket = new ServerSocket(fetchPort)){ Socket socket = serversocket.accept(); new ScoreServiceThread(mon, socket).start(); catch (IOException e) {

4(5) class ScoreMonitor{ private int score = 0; private String name = "no high score set"; synchronized public void registernewscore(int newscore, String newname) { if(newscore > score) { score = newscore; name = newname; notifyall(); synchronized public HiScore awaitnewhiscore(int oldscore){ while( oldscore >= score ) { wait(); catch (InterruptedException e) { return new HiScore(score, name); class ScoreServiceThread extends Thread{ DataInputStream dis; DataOutputStream dos; private ScoreMonitor mon; ScoreServiceThread(ScoreMonitor mon, Socket socket) throws IOException{ this.mon = mon; dis = new DataInputStream(socket.getInputStream()); dos = new DataOutputStream(socket.getOutputStream()); public void run() { int oldscore = dis.readint(); HiScore score = mon.awaitnewhiscore(oldscore); dos.writeint(score.score); dos.writeutf(score.name); dos.flush(); catch (IOException e) { class ScoreUpdateThread extends Thread{ static final int updateport = 9000; private ScoreMonitor mon; ScoreUpdateThread(ScoreMonitor mon){ this.mon = mon; public void run() { try(serversocket serversocket = new ServerSocket(updatePort)){

5(5) Socket socket = serversocket.accept(); DataInputStream dis = new DataInputStream(socket.getInputStream()); int newscore = dis.readint(); String name = dis.readutf(); socket.close(); mon.registernewscore(newscore, name); catch (IOException e) {