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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

Tentamen Nätverksprogrammering Lösningsförslag

F8 Meddelandesändning med UDP

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Exam Concurrent and Real-Time Programming

Distribuerade system. CORBA eller RMI

Tentamen Nätverksprogrammering 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

10 Kommunikation i Java

F9 Meddelandesändning med UDP

LÖSNINGSFÖRSLAG

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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.

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

Tentamen Lösningar EDA698 Realtidssystem

DEL 2 - Praktiska programmeringsuppgifter

F8 Webbteknologier 1. Dynamiska webbsidor

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

F1 Nätverk och meddelandesändning

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

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.

Recitation 4. 2-D arrays. Exceptions

Språkkonventioner och redigering av tal.

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

Objektorienterad Programmering (TDDC77)

F1 Nätverk och meddelandesändning

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Undantagshantering. Fördjupad Java. Fel. Undantag. Fånga Undantag. Grupper av Undantag

Undantagshantering. Fördjupad Java. Undantag. Fel. Grupper av Undantag. Fånga Undantag

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

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

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

9 Aktiva objekt och trådar

Lösningsförslag till tentamen

Lösningar för tenta 2 DAT043,

The Last Adventure. Innehåll. Objektorientering. Språket Java. Java - Paket. Java - synlighet. Den sista lektionen. Repetition.

Föreläsning 3. Stack

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

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

Föreläsning 3. Stack

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

Fördjupad Java. Undantagshantering. Fel

Objektorienterad Programmering (TDDC77)

Lösningsförslag till tentamen i EDA690 Algoritmer och Datastrukturer, Helsingborg

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

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

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

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

F4. programmeringsteknik och Matlab

Tentamen, EDA690 Algoritmer och Datastrukturer, Helsingborg

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

Laborationer, moment 4 5

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

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

Klasser som datastrukturer

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

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

Tentamen FYTA11 Javaprogrammering

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

Lösningsförslag till tentamen i EDAA01 programmeringsteknik fördjupningkurs

Laborationer, moment 4 5

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

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

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

Socket-programmering. Programmering för distribution. Klient/server ansatsen. Klient/server ansatsen TCP/IP protokollgrafen Java-programering

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

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.

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

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

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

Lösningsförslag till exempeltenta 2

LULEÅ TEKNISKA UNIVERSITET

F1 Nätverk och meddelandesändning

Tentamen. Lösningsförslag

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

Trådar. Aktiva objekt

Distribuerade System, HT03

Föreläsning 5 Meddelandesändning med TCP

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

F5 Meddelandesändning med TCP

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Input. Programmering. Andra källor

Transkript:

LUNDS TEKNISKA HÖGSKOLA Datavetenskap Nätverksprogrammering 2006 LÖSNINGAR Tentamensskrivning Nätverksprogrammering (EDA095) 2004-05-27, kl 8-13 DEL 1 - Frågor av teoretisk, principiell eller utredande karaktär 1. a) Buffring ökar effektiviteten i överföringen genom att skicka större paket av data åt gången. Det medför mindre overhead och högre överföringshastigheter. b) Ett problem som kan uppstå är att data som ska skickas buffras i väntan på mer data och inte skickas iväg direkt. Om vi har en dialog över nätverket mellan två datorer kan detta medföra dödläge genom att den sändande datorn väntar på ett svar som aldrig kommer eftersom den mottagande datorn aldrig får någon begäran om svar. Vi kan tvinga strömmen att skicka iväg allt som finns buffrat genom att anropa metoden flush(). 2. a) Remote Method Invocation. b) RMI är i Java en abstraktion över de grundläggande kommunikationsprotokollet som erbjuder en programmeringsmodell där ett program kan, till synes, exekvera metoder på objekt som i verkligheten finns på en annan dator i nätverket. Metodanrop, med tillhörande parametrar och returvärden översätts av ett stub -objekt på den lokala datorn till ett anrop över nätverket till en server där ett skeleton -objekt utför anropet på det verkliga objektet. RMI är Javas motsvarighet till RPC - Remote Procedure Call. 3. Session Initiation Protocol. SIP används för att upprätta och stänga ner förbindelser över ett nätverk och för att förhandla om eventuella parametrar för överföringen. 4. a) Ett exempel på en fördel med CGI är att det är oberoende av programmeringsspråk. b) En fördel med servlets är att en servlet inte behöver startas om för varje anrop utan kan snabbt svara på nästa begäran och även att den kan behålla ett tillstånd i minnet mellan varje begäran. 5. En metod är att spara information om den aktuella sessionen som dolda fält i formulär i den HTML-sida som returneras till klienten. När nästa begäran kommer kan fälten läsas av och informationen behandlas av servern. Antingen kan servern välja att lagra all nödvändig information på detta sätt eller också kan den nöja sig med att lagra ett identifikationsnummer eller liknande som den sedan kan matcha mot en informationsdatabas på servern. En annan variant är att använda s.k. cookies på motsvarande sätt. Abstraktionen som representeras av klassen HttpSession är också ett alternativ, vilket implementationstekniskt bygger på någon av de förstnämnda teknikerna. 6. 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.

7. a) Ett problem Niklas kan få är att meddelanden försvinner eftersom set() skulle kunna anropas två gånger i följd av samma tråd. Ett annat problem som kan uppstå är att den läsande tråden stjäl all tillgänglig CPU-tid (busy-wait) vilket kan göra att andra trådar, t.ex. den som anropar set() aldrig får köra. b) public class Buffer() { private String message; public synchronized void set(string m) { while (m!=null) { wait(); catch(interruptedexception e) { message = m; notifyall(); public synchronized String get() { while (m==null) { wait(); catch(interruptedexception e) { String m = message; message = null; notifyall(); return m; 2

DEL 2 - Praktiska programmeringsuppgifter 1. Synkronisering av klockor TimeSyncClient.java import java.net.*; import java.io.*; A class used to keep the local clock synchronized with the clock of a central server. public class TimeSyncClient extends Thread { private InetAddress timeserver; private int serverport; private int period; private long serialno; Constructor. The serveraddr and portno parameters determines the location of the corresponding server. The period parameter gives the interval (in minutes) between two synchronization attempts. public TimeSyncClient(String serveraddr,int portno,int period) { timeserver = InetAddress.getByName(serverAddr); serverport = portno; this.period = period; serialno = 0; start(); /* Activate the thread. catch(unknownhostexception) { /* Error detected. Print an error message, but let the application continue without automatic clock synchronization. System.err.println( TimeSyncClient: +e); 3

Main thread method. public void run() { /* Set our priority to maximum to minimize interference from other threads. setpriority(max_priority); /* Create a DatagramSocket to be used for communicating with the server. DatagramSocket mysocket = null; mysocket = new DatagramSocket(); mysocket.setsotimeout(500); /* receive times out after 500 ms. catch(socketexception e) { System.err.println( TimeSyncClient: +e); return; /* Terminate this thread only. /* Request synchronization periodically. byte[] buffer = new byte[100]; while (true) { /* Create a message with a unique serial number and send it. String sno = Long.toString(++serialNo); DatagramPacket dp = new DatagramPacket(sNo.getBytes(), sno.getbytes().length,timeserver,serverport); long t1 = System.currentTimeMillis(); long t2; mysocket.send(dp); /* Wait for answer from the server. If there is an exception due to timeout, i/o error, or malformed messages, abort the synchronization attempt and wait the stipulated amount of time before trying again. String serial; String answer; int x; /* Receive messages until the message corresponding to our latest request arrives (typically the first one). do { dp = new DatagramPacket(buffer,buffer.length); mysocket.receive(dp); t2 = System.currentTimeMillis(); answer = new String(dp.getData(),0,dp.getLength()); x = answer.indexof( ); serial = answer.substring(0,x); while (Long.parseLong(serial)<serialNo); String servertime = answer.substring(x+1,answer.length()); long newtime = Long.parseLong(serverTime)+(t2-t1)/2; System.setCurrentTimeMillis(newTime); catch(numberformatexception e) { catch(interruptedioexception e) { catch (IOException e) { /* Wait until next period... sleep(60*1000*(long)period); catch(interruptedexception e) { 4

TimeSyncServer.java import java.net.*; import java.io.*; A class used for keeping the local clocks of a set of client nodes synchronized with the clock of this node. public class TimeSyncServer extends Thread { private DatagramSocket mysocket; Constructor. The parameter indicates which port this server should listen on. public TimeSyncServer(int portno) { /* Create DatagramSocket for receiving requests. mysocket = new DatagramSocket(portno); start(); /* Activate the thread. catch(socketexception e) { /* An error occurred! Abort the server thread without terminating the main application. System.err.println( TimeSyncServer: +e); public void run() { /* Set our priority to maximum to minimize interference from other threads. setpriority(max_priority); /* Receive requests one by one and return the current time together with the client-specified serial number. byte[] b = new byte[100]; while(true) { DatagramPacket dp = new DatagramPacket(b,b.length); mysocket.receive(dp); String serial = new String(dp.getData(),0,dp.getLength()); InetAddress sender = dp.getaddress(); int senderport = dp.getport(); String timestring = serial+ + Long.toString(System.currentTimeMillis()); byte[] time = timestring.getbytes(); dp = new DatagramPacket(time,time.length,sender,senderPort); mysocket.send(dp); catch(ioexception e) { /* An error occurred. Ignore the request and wait for the next one. 5

2. Distribuerad high-score-lista via RMI Server- och klientsida public class HiScores implements serializable{ public String[] player; public int[] score; public HiScores() { player = new String[10]; score = new int[10]; public interface HiScoreList extends Remote { public HiScores gethighscores() throws RemoteException; public void sendscore(string name,int score) throws RemoteException; Klientsidan public class HiScoreCommunication { private HiScoreList list; public HiScoreCommunication() { list = (HiScoreList) Naming.lookup("rmi://gote.cs.lth.se/hiscore"); catch(exception e) { System.exit(1); public HiScores fetchhiscores() { HiScores scores = null; scores = list.gethighscores(); catch(exception e) { System.exit(1); return scores; public void sendnewscore(string name,int score) { list.sendscore(name,score); catch(exception e) { System.exit(1); 6

Serversidan import java.rmi.*; public class HiScoreListServer { public static void main(string [] args) { HiScoreList hiscore = new HiScoreListImpl(); Naming.rebind("hiscore", hiscore); catch (Exception e) { import java.rmi.*; public class HiScoreListImpl extends java.rmi.server.unicastremoteobject implements HiScoreList { private HiScores hiscores; public HiScoreListImpl() throws RemoteException { hiscores = new HiScores(); public void sendscore(string name, int score) throws RemoteException { String tmpname; int tmpscore; for(int i=0;i<hiscores.player.length;i++) { if (hiscores.score[i]<score) { tmpname = hiscores.player[i]; tmpscore = hiscores.score[i]; hiscores.player[i] = name; hiscores.score[i] =score; name = tmpname; score = tmpscore; public HiScores gethighscores() throws RemoteException { HiScores res = new HiScores(); for(int i=0;i<hiscores.player.length;i++) { res.player[i] = new String(hiscores.player[i]); res.score[i] = hiscores.score[i]; return res; 7