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

F1 Nätverk och strömmar

F9 Meddelandesändning med UDP

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

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

Tentamen Nätverksprogrammering Lösningsförslag

10 Kommunikation i Java

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

Datakommunikation och Internet

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

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Modul 6 Webbsäkerhet

Fördjupad Java. Undantagshantering. Fel

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

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

Språkkonventioner och redigering av tal.

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

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

JAVAUTVECKLING LEKTION 7

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

IT för personligt arbete F2

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.

Tentamen Nätverksprogrammering Lösningsförslag

F8 Webbteknologier 1. Dynamiska webbsidor

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 14. Filhantering

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

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

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

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

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

Tentamen i Datorkommunikation den 10 mars 2014

DEL 2 - Praktiska programmeringsuppgifter

Laborationer, moment 4 5

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

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

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

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Grundläggande datavetenskap, 4p

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

Input. Programmering. Andra källor

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

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

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

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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

SMD 134 Objektorienterad programmering

Laborationer, moment 4 5

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

OOP Objekt-orienterad programmering

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

Ingenjörsfirman Stéen Java Sida 1 av 1

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)

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

Lösningar för tenta 2 DAT043,

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

Objektorienterad Programmering (TDDC77)

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

Datakommunika,on på Internet

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

F4. programmeringsteknik och Matlab

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Gästföreläsningen. Synpunkter?

Objektorienterad Programmering DAT043. Föreläsning 4 23/1-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 7 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Transkript:

Transmission Control Protocol TCP Föreläsning 5 Meddelandesändning med TCP EDA095 Per Andersson Datavetenskap Lunds universitet En del av transportlagret. Applikationsprogram Applikationsprotokoll Applikationsprogram Transportlagret TCP / UDP Transportlagret Internetlagret IP 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): Java och TCP Motsvarar en upprättad förbindelse till vilken man kan skriva utgående bytes och läsa inkommande bytes. Server 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. 3 4 modell Modell input output -objektet sköter övergripande egenskaper för uppkopplingen. Stream-objekten har hand om in-/utmatning av bytes. Stream-objekten skapas automatiskt. InputStream OutputStream Konstruktorer public (String host, int port) throws UnknownHostException, IOException; public (InetAddress host,int port) Get-metoder public InputStream getinputstream() public OutputStream getoutputstream() public InetAddress getinetaddress(); public int getport(); public InetAddress getlocaladdress(); public int getlocalport(); 5 6

, fortsättning Inställningar public void settcpnodelay(boolean on) throws Exception; public boolean gettcpnodelay() throws Exception; public void setsotimeout(int milliseconds) throws Exception; public int getsotimeout() throws Exception;, fortsättning Koppla ned public void close() public void shutdowninput public void shutdownoutput Status public boolean isconnected(); public boolean isclosed(); public boolean isinputshutdown(); public boolean isoutputshutdown(); 7 8 Skapa en socket (klient) Att läsa stora block - repetition socket = null; InputStream input = null; OutputStream output = null; try { socket = new ( 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); DEMO - SimpleTelnet 9 Att läsa en byte i taget med read() är mycket ineffektivt. Lösning: public int read(byte[] input,int offset,int length) 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 ordet = receive(); switch (order.command) { case commanda: result = docommanda(order.parameters); case commandb: result = docommandb(order.parameters); case commandc: result = docommandc(order.parameters); default: send(order.client, result); 11 Server Fungerar som en telefonist - tar emot uppkopplingar på serversidan och skapar ett motsvarande -objekt. Klienten och servern kommunicerar via denna. En servers livscykel 1. Skapa en Server. 2. Vänta på uppkoppling (accept()). skapas. 3. Hämta strömmar med getinputstream() respektive getoutputstream(). 4. Servern och klienten kommunicerar med varandra. 5. Förbindelsen kopplas ned. 12

Server, fortsättning Konstruktorer public Server(int port) public Server(int port, int queuelength) Vänta på en uppkoppling public accept() Koppla ned servern public void close() Server, fortsättning Get-metoder public InetAddress getinetaddress(); public int getlocalport(); public int getsotimeout() Set-metoder public void setsotimeout(int timeout) DEMO - ToUpperServer 13 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()); 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! 15 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

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)? 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 HTTP HTTP, fortsättning 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 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> Design: enkel HTTP-server Design: enkel multitrådad server Nackdelar Kan endast hantera en uppkoppling åt gången. Utnyttjar tillgänglig bandbredd dåligt. new (socket).start(); Fördelar enkel design klarar flera uppkopplingar parallellt Nackdel Skalar inte upp. Starta nya trådar dyrt.

Design: trådpool och jobblista En kö med ankomna anslutningar och en pool av servertrådar. jobs.insert(socket); socket = jobs.getjob(); Variant av föregående lösning. Design: Executors Implementera en trådpool mha Executors i Java. ExecutorService pool = Executors.newFixedThreadPool(10); pool.submit(new (socket)); Notera: Ingen pool.shutdown()! 26 Icke-blockerande I/O i C Internetradio anno 1992 på Datavetenskap. anslutning raclient.c raserver.c 27