Föreläsning 5 Meddelandesändning med TCP

Relevanta dokument
Föreläsning 5 Meddelandesändning med TCP

F5 Meddelandesändning med TCP

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

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

F8 Meddelandesändning med UDP

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

F9 Meddelandesändning med UDP

F1 Nätverk och strömmar

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

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

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

F1 Nätverk och meddelandesändning

Tentamen Nätverksprogrammering Lösningsförslag

F1 Nätverk och meddelandesändning

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

F1 Nätverk och meddelandesändning

10 Kommunikation i Java

Tentamen Nätverksprogrammering Lösningsförslag

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

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Datakommunikation och Internet

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

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

JAVAUTVECKLING LEKTION 7

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 1. På klientsidan... Allmänt. På serversidan... Och dessutom... DD1389 Internetprogrammering 6 hp

Språkkonventioner och redigering av tal.

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

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

Modul 6 Webbsäkerhet

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

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

Laborationer, moment 4 5

Innehåll. Socketar. Klient och serverprogrammering: Socketar Föreläsning 9. Klienter och servrar (som sagts tidigare ) Varför socketar

Fördjupad Java. Undantagshantering. Fel

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.

IT för personligt arbete F2

Tentamen Nätverksprogrammering Lösningsförslag

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

Laborationer, moment 4 5

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 8 Erik Nilsson, Institutionen för Datavetenskap, LiU

F8 Webbteknologier 1. Dynamiska webbsidor

DEL 2 - Praktiska programmeringsuppgifter

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

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

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

Föreläsning 14. Filhantering

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

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

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

Tentamen i Datorkommunikation den 10 mars 2014

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

Gästföreläsningen. Synpunkter?

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

Tentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.

OOP Objekt-orienterad programmering

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

Grundläggande datavetenskap, 4p

Inre klasser Anonyma klasser Kloning I/O-ramverket. anonyma klasser

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

OOP Objekt-orienterad programmering

Föreläsning 7. DD2390 Internetprogrammering 6 hp

SMD 134 Objektorienterad programmering

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

LÖSNINGSFÖRSLAG TILL TENTAMEN PROGRAMMERINGSMETODIK MOM2 - JAVA, 4P.

F4. programmeringsteknik och Matlab

Input. Programmering. Andra källor

Ingenjörsfirman Stéen Java Sida 1 av 1

DOM (Document Object Model) är modellen efter vilken en webbläsaren är uppbyggd. Alla objekt/element i webbläsaren finns hierarkiskt ordnade i DOM.

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

Datakommunika,on på Internet

Grundläggande nätverksteknik. F2: Kapitel 2 och 3

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)

List.java. List.java. Printed by Tom Smedsaas

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Administration: Grundläggande internetprogrammering

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

Transkript:

Föreläsning 5 Meddelandesändning med TCP EDA095 Nätverksprogrammering Per Andersson Datavetenskap Lunds universitet

Transmission Control Protocol TCP En del av transportlagret. Applikationsprogram Transportlagret Internetlagret Applikationsprotokoll TCP / UDP IP Applikationsprogram Transportlagret Internetlagret Fysiskt överföringsmedium. "Host-To-Network Layer". 2

TCP "Fast" uppkoppling mellan två portar på (vanligtvis) två olika datorer. Fast uppkoppling (connected protocol)! Automatisk omsändning / sortering av meddelanden. Ingen storleksbegränsning. Ur applikationsprogrammets synvinkel fungerar en TCP-förbindelse som två strömmar (streams), en inkommande (InputStream) och en utgående (OutputStream): 3

Java och TCP Socket Motsvarar en upprättad förbindelse till vilken man kan skriva utgående bytes och läsa inkommande bytes. ServerSocket Används av en server för att vänta på uppkopplingar. Stream I/O InputStream och OutputStream från java.io. Paketen java.net och java.io. 4

Socket modell Modell ell Socket InputStream input output OutputStream Socket-objektet sköter övergripande egenskaper för uppkopplingen. Stream-objekten har hand om in-/utmatning av bytes. Stream-objekten skapas automatiskt. 5

Nätverksprogrammering Socket Konstruktorer public Socket(String host, int port) throws UnknownHostException, IOException; public Socket(InetAddress host,int port) throws IOException; Get-metoder public InputStream getinputstream() throws IOException; public OutputStream getoutputstream() throws IOException; public InetAddress getinetaddress(); public int getport(); public InetAddress getlocaladdress(); public int getlocalport(); 6

Socket, fortsättning Inställningar public void settcpnodelay(boolean on) throws SocketException; public boolean gettcpnodelay() throws SocketException; public void setsotimeout(int milliseconds) throws SocketException; public int getsotimeout() throws SocketException;... 7

Socket, fortsättning Koppla ned public void close() throws IOException; public void shutdowninput throws IOException; public void shutdownoutput throws IOException; Status public boolean isconnected(); public boolean isclosed(); public boolean isinputshutdown(); public boolean isoutputshutdown(); 8

Skapa en socket (klient) Socket socket = null; InputStream input = null; OutputStream output = null; try { socket = new Socket( cs.lth.se,80); input = socket.getinputstream(); output = socket.getoutputstream(); } catch (UnknownHostException e) { System.out.println(e); System.exit(1); } catch (IOException e) { System.out.println(e); System.exit(1); } socket.close(); DEMO - SimpleTelnet 9

Att läsa stora block - repetition Att läsa en byte i taget med read() är mycket ineffektivt. Lösning: public int read(byte[] input,int offset,int length) throws IOException; Varning! Ingen garanti att angivet antal bytes läses! Exempel: Vi vill läsa exakt 100 byte. byte[] buffer = new byte[100]; int read = 0; int result = 0; while (read<100 && result!=-1) { result = input.read(buffer,read,100-read); if (result!=-1) read = read+result; } 10

TCP-server skelett while (true) { ordet = receive(); switch (order.command) { case commanda: result = docommanda(order.parameters); break; case commandb: result = docommandb(order.parameters); break; case commandc: result = docommandc(order.parameters); break;... default:... } send(order.client, result); 11

ServerSocket Fungerar som en telefonist - tar emot uppkopplingar på serversidan och skapar ett motsvarande Socket-objekt. Klienten och servern kommunicerar via denna Socket. En servers livscykel 1. Skapa en ServerSocket. 2. Vänta på uppkoppling (accept()). Socket skapas. 3. Hämta strömmar med getinputstream() respektive getoutputstream(). 4. Servern och klienten kommunicerar med varandra. 5. Förbindelsen kopplas ned. 12

ServerSocket, fortsättning Konstruktorer public ServerSocket(int port) throws IOException; public ServerSocket(int port, int queuelength) throws IOException;... Vänta på en uppkoppling public Socket accept() throws IOException;... Koppla ned servern public void close() throws IOException; 13

ServerSocket, fortsättning Get-metoder public InetAddress getinetaddress(); public int getlocalport(); public int getsotimeout() throws IOException; Set-metoder public void setsotimeout(int timeout) throws IOException; DEMO - ToUpperServer 14

Skicka/ta emot tecken Ibland vill man skicka tecken istället för bytes och vill slippa att själv göra omvandlingen i sitt program. Reader/Writer - en parallell klasshierarki till InputStream/ OutputStream som hanterar tecken enligt en given teckenkodning. Vi gör om strömmar till en reader/writer genom att kapsla in den (precis som med FilterInput/OutputStream): OutputStreamWriter out = new OutputStreamWriter(socket.getOutputStream()); InputStreamReader in = new InputStreamReader(socket.getInputStream()); 15

Skicka/ta emot strängar Klasserna BufferedReader och PrintWriter representerar sträng- och textorienterade strömmar. De är buffrade och hanterar rader av tecken effektivt via metoden readline(): InputStream is =... OutputStream os =... BufferedReader in = new BufferedReader(new InputStreamReader(is)); PrintWriter out = new PrintWriter(os,true); Se kursboken och Javas klassdokumentation! 16

Hantera flera TCP-anslutningar Vad händer om en andra klient kopplar upp sig medan servern är upptagen med att betjäna den första klienten? Blockering eller förvägrad uppkoppling! DEMO - ToUpperServer Visst hade det varit bra om ert serverprogram kunde göra flera saker samtidigt? Tex betjäna flera olika klienter? Lösningar: Trådar... Non-blocking I/O - java.nio, java.nio.channels 17

Design av applikationsprotokoll Hittills stort fokus på gränssnittet mellan applikationsprogram och transportlagret. Applikationsprotokoll och TCP Avgränsning av fält/meddelanden Kodning av datatyper som en sekvens av bytes Teckenkodning radslut Big-endian/little-endian Börja skriva för att lägga till text

Protokolldesign exempel I kursen Realtidsprogrammering behöver man överföra en ström av JPEG-bilder tillsammans med tidsstämplar. För varje bild: Tidsstämpel (heltal, long) JPEG-bild (ett variabelt antal sekvensiella bytes) Problem Hur representerar man en tidsstämpel? Binärt? ASCII? Ordning? Hur vet man när alla bytes i själva bilden sänts? När börjar nästa meddelande (bild)? Börja skriva för att lägga till text

Exempel, fortsättning Protokollförslag: 1. Tidsstämpel en long i binär form, 8 bytes, big-endian 2. Antal bytes i den efterföljande JPEG-bilden long, 8 bytes, bigendian 3. JPEG-bilden den sekvens av bytes som utgör bilden Börja skriva för att lägga till text

HTTP Protokoll för kommunikation mellan webbläsare och webbserver. RFC1945 (HTTP 1.0) och RFC2616 (HTTP 1.1). Textbaserat Radbaserat, radslut: CR + LF HTTP 1.0: Anslutning via TCP Request Response Nedkoppling Börja skriva för att lägga till text

HTTP, fortsättning Request (avslutas med dubbla radslut, CR+LF+CR+LF): GET /index.html HTTP/1.1 Accept: text/html, text/plain, image/gif, image/jpeg User-Agent: Mozilla/4.0 Host: ygg.cs.lth.se Response: HTTP/1.1 200 OK Date: Wed, 29 Mar 2006 08:20:32 GMT Server: Apache/2.0.40 (Red Hat Linux) Last-Modified: Mon, 21 Mar 2006 18:17:07 GMT Content-type: text/html; charset=iso-8859-1 Content-length: 107 <html> <head>... Börja skriva för att lägga till text

Design: enkel HTTP-server while (true) { socket = serversocket.accept(); parseandresponse(socket); socket.close(); } Nackdelar Kan endast hantera en uppkoppling åt gången. Utnyttjar tillgänglig bandbredd dåligt. Börja skriva för att lägga till text

Design: enkel multitrådad server Main while (true) { socket = serversocket.accept(); new RequestHandler(socket).start(); } RequestHandler parseandresponse(socket); socket.close(); Fördelar enkel design klarar flera uppkopplingar parallellt Nackdel Skalar inte upp. Starta nya trådar dyrt. Börja skriva för att lägga till text

Design: trådpool och jobblista En kö med ankomna anslutningar och en pool av servertrådar. Main while (true) { socket = serversocket.accept(); jobs.insert(socket); } RequestHandler while (true) { socket = jobs.getjob(); parseandresponse(socket); socket.close(); } Variant av föregående lösning. Börja skriva för att lägga till text

Design: Executors Implementera en trådpool mha Executors i Java. Main ExecutorService pool = Executors.newFixedThreadPool(10); while (true) { socket = serversocket.accept(); pool.submit(new RequestHandler(socket)); } RequestHandler while (true) { parseandresponse(socket); socket.close(); } Notera: Ingen pool.shutdown()! 26

Icke-blockerande I/O i C Internetradio anno 1992 på Datavetenskap. anslutning raclient.c raserver.c 27