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



Relevanta dokument
Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

DEL 2 - Praktiska programmeringsuppgifter

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

F8 Meddelandesändning med UDP

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

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 Nätverksprogrammering Lösningsförslag

Föreläsning 5 Meddelandesändning med TCP

F5 Meddelandesändning med TCP

Föreläsning 5 Meddelandesändning med TCP

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

F9 Meddelandesändning med UDP

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

Tentamen Nätverksprogrammering Lösningsförslag

10 Kommunikation i Java

F8 Webbteknologier 1. Dynamiska webbsidor

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

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

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

F1 Nätverk och meddelandesändning

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen Nätverksprogrammering Lösningsförslag

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

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

F1 Nätverk och strömmar

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 14. Filhantering

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

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

Olika slags datornätverk. Föreläsning 5 Internet ARPANET, Internet började med ARPANET

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

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

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

JAVAUTVECKLING LEKTION 7

Objektorienterad programmering i Java

Datakommunikation och Internet

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

F1 Nätverk och meddelandesändning

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

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

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

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

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

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

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

Laborationer, moment 4 5

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Språkkonventioner och redigering av tal.

Projektrapport. MegaLoad. Nätverksprogrammering EDA

Laborationer, moment 4 5

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

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

SMD 134 Objektorienterad programmering

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.

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

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

F1 Nätverk och meddelandesändning

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

(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

TCP/IP och Internetadressering

Trådar. Aktiva objekt

Lösningar för tenta 2 DAT043,

Datakommunika,on på Internet

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

Java: Utvecklingsverktyg, datatyper, kontrollstrukturer

F4. programmeringsteknik och Matlab

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

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

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

IT för personligt arbete F2

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

Vem är vem på kursen. Objektorienterad programvaruutveckling GU (DIT011) Kursbok Cay Horstmann: Big Java 3rd edition.

Fördjupad Java. Undantagshantering. Fel

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

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

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

Hur ser ett Java-program ut?

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

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

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

Tentamen , Introduktion till Java, dtaa98, dtea53

Objektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016

Ingenjörsfirman Stéen Java Sida 1 av 1

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

Tentamen OOP

Objektorienterad Programkonstruktion, DD1346. Tentamen , kl

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

Tentamen. Lösningsförslag

Tentamen i Datorkommunikation den 10 mars 2014

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

17.9 Funktioner för avbildningstabeller

Transkript:

LUNDS TEKNISKA HÖGSKOLA Datavetenskap Nätverksprogrammering 2004 LÖSNINGAR Tentamensskrivning Nätverksprogrammering (EDA095 - FED) 2004-05-25, kl 8-13 DEL 1 - Frågor av teoretisk, principiell eller utredande karaktär 1. a) 1. UDP = User Datagram Protocol 2. TCP = Transmission Control Protocol b) UDP är ett okopplat protokoll baserat på sändning av "paket" av data i form av bytes. Varje paket kan ha en separat mottagare. Det finns ingen garanti att ett paket kommer fram till adressaten eller att paketen kommer fram i samma ordning de skickades. Kommer ett paket fram garanteras dock att det är korrekt. Maximal paketstorlek är 65507 bytes (IPv4). TCP är ett kopplat protokoll, dvs man upprättar en "fast" förbindelse mellan två noder i nätverket. All data som sänds går till den nod som man upprättade förbindelsen till. Data skickas (ur programmerarens synvinkel) i form av en ström utan uppdelning i enskilda paket. Det garanteras att data kommer fram och att data kommer fram i rätt ordning (automatisk omsändning). 2. Common Gateway Interface, CGI, är en teknik för att få en webbserver att dynamiskt skapa HTML-sidor när en webbläsare begär en sida. Det är en av de äldsta teknikerna för detta och kan t.ex. användas för att behandla inmatning i webbformulär. Tekniskt fungerar det så att när webbservern mottar en begäran av en CGI-baserad webbsida startas ett externt program som läser in parametrarna för begäran, som texten som matades in i ett webbformulär, och baserat på detta genererar HTML-kod. HTML-koden skrivs till standard output, tas emot av servern och skickas vidare till webbläsaren. Därefter terminerar det externa programmet. Behovet av att starta upp en ny operativsystemsprocess gör tekniken ganska tung och har till stor del ersatts av modernare tekniker som t.ex. JSP. 3. RFC står för Request For Comments och är ett dokument som beskriver ett förslag till standard för t.ex. ett protokoll som används på Internet. Trots namnet fungerar en RFC oftast som en accepterad de facto-standard för det som beskrivs. Exempel på tekniker som beskrivs i form av RFCer är TCP, HTML och SMTP (mailkommunikation). 4. 1. Begäran anländer i form av en GET -begäran från klienten. 2. Servern upptäcker, vanligen genom att det begärda dokumentet slutar på.jsp att det är fråga om ett JSP-dokument. 3. Om det är första gången dokumentet begärdes läser servern in.jsp-filen och startar en JSP-kompilator för att översätta denna fil till ett Java-program i form av en servlet. 4. Java-filen kompileras (om ej redan kompilerad) med Java-kompilatorn till en färdig servlet. 5. Den genererade servleten startas och genererar ett svar till klienten. 6. Svaret skickas till klienten. 5. I RMI-samband är en stubbe (stub) en klass som på klientsidan representerar det objekt på servern som ska anropas över nätet. Stubben ser för klientprogrammet ut precis som objektet på servern och omvandlar metodanrop till meddelanden som skickas över nätet. På serversidan finns det ett s.k. skelett (skeleton) som tar emot meddelanden från klienten och

översätter dem till metodanrop på serverobjektet. Från Java version 1.2 finns det inte behov av en separat skelettklass, utan dess funktionalitet är inbyggd i Javas standrdklasser för RMI. 6. a) Ström som används för att lagra data på ett skivminne: FileOutputStream b) Superklass för alla klasser som representerar utgående strömmar: OutputStream c) Superklass för flera av de klasser som utökar funktionaliteten hos en existerande ström: FilterOutputStream d) Innehåller metoder för att skicka olika typer av primitiva datatyper, t.ex. heltal, flyttal: DataOutputStream 7. a) Ömsesidig uteslutning innebär att bara en tråd i taget kan använda sig av en delad resurs. Om en andra tråd försöker använda sig av samma resurs kommer den att blockeras tills den första tråden är färdig med resursen. b) Busy-wait c) Mycket CPU-krävande. I värsta fall kan den helt hindra andra mera lågprioriterade trådar att köra genom att ta upp all tillgänglig CPU-tid. d) public class BinarySemaphore { boolean locked = false; public synchronized void take() { while(locked) { wait(); catch(interruptedexception e) { locked = true; public synchronized void give() { locked = false; notify(); 8. a) Falskt. b) Korrekt. c) Falskt. d) Korrekt. 2

DEL 2 - Praktiska programmeringsuppgifter 1. TicTacToe, eller tre-i-rad import java.io.*; import java.net.*; class TicTacToe { public static void main(string [] args) { ServerSocket ss = new ServerSocket(7878); while (true) { Socket player1,player2; player1 = ss.accept(); player1.getoutputstream().write( Please wait for opponent...\r\n.getbytes()); player2 = ss.accept(); new TicTacToeGame(player1,player2).start(); catch(ioexception e) { System.out.println( Network error, shutting down. ); class TicTacToeGame extends Thread { private OutputStream[] p; private BufferedReader[] r; private Socket[] s; public TicTacToeGame(Socket p1,socket p2) { s = new Socket[2]; r = new BufferedReader[2]; p = new OutputStream[2]; s[0] = p1; s[1] = p2; public void run() { boolean stop = false; TicTacToeBoard board = new TicTacToeBoard(); int turn = 0; int moves; p[0] = s[0].getoutputstream(); r[0] = new BufferedReader(new InputStreamReader( s[0].getinputstream())); turn = 1; p[1] = s[1].getoutputstream(); r[1] = new BufferedReader(new InputStreamReader( s[1].getinputstream())); while (!stop) { turn = 0; println(p[0], New game begins! Your mark is X.\r\n ); turn = 1; println(p[1], New game begins! Your mark is O.\r\n ); board.clear(); turn = (int) (Math.random()*2.0); moves = 0; while (!board.gamewon() &&!stop && moves<9) { 3

println(p[turn],board.tostring()); boolean legal = false; while (!legal) { println(p[turn], Enter your move (or q to quit): ); String response = r[turn].readline(); if (response.equals( q )) { stop = true; legal = true; else { if (response.length()==2) { int r = ((int)response.charat(0))-((int) 0 ); int c = ((int)response.charat(1))-((int) 0 ); if (r>0 && r<4 && c>0 && c<4 && board.isfree(r-1,c-1)) { if (turn==0) { board.setx(r-1,c-1); else { board.seto(r-1,c-1); moves++; legal = true; println(p[turn],board.tostring()); if (!legal) { println(p[turn], Illegal move or command, try again!\r\n ); if (!stop) { if (!board.gamewon()) { println(p[turn], Game over. There was a tie!\r\n\r\n ); println(p[turn], Game over. There was a tie!\r\n\r\n ); else { println(p[turn], Game over. You won!\r\n\r\n ); println(p[turn], Game over. You lost!\r\n\r\n ); else { println(p[turn], You left the game.\r\n ); println(p[turn], Your opponent left the game!\r\n ); catch(ioexception e) { println(s[1-turn].getoutputstream(), Network error occurred, terminating game.\r\n ); catch(ioexception x) { s[0].close(); catch(ioexception e) { s[1].close(); catch(ioexception e) { private void println(outputstream o,string s) throws IOException { o.write(s.getbytes()); o.flush(); 4

2. Internetradio via multicast import java.net.*; import java.io.*; public class NetworkRadioBroadcaster{ public static void main(string args[]) { SoundIO io = new SoundIO(); MulticastSocket ms = new MulticastSocket(); byte[] buf = new byte[2048]; InetAddress receiver = InetAddress.getByName("all-systems.mcast.net"); ms.joingroup(receiver); DatagramPacket dp = new DatagramPacket(buf,buf.length, receiver,40099); while(true) { int len = io.read(buf); dp.setlength(len); ms.send(dp,1); // A TTL of one is enough for the Department catch(ioexception e) { System.out.println("Exception:"+e); 5