F5 Meddelandesändning med TCP

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

Föreläsning 5 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

F9 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

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

F1 Nätverk och meddelandesändning

F1 Nätverk och meddelandesändning

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

F1 Nätverk och meddelandesändning

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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,

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

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

Tentamen Nätverksprogrammering Lösningsförslag

JAVAUTVECKLING LEKTION 7

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

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

Modul 6 Webbsäkerhet

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

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

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

Språkkonventioner och redigering av tal.

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Laborationer, moment 4 5

Fördjupad Java. Undantagshantering. Fel

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

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

F8 Webbteknologier 1. Dynamiska webbsidor

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

Laborationer, moment 4 5

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

IT för personligt arbete F2

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

Tentamen Nätverksprogrammering Lösningsförslag

DEL 2 - Praktiska programmeringsuppgifter

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

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

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

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.

Grundläggande datavetenskap, 4p

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

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

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

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

OOP Objekt-orienterad programmering

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

OOP Objekt-orienterad programmering

Tentamen i Datorkommunikation den 10 mars 2014

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

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

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Ingenjörsfirman Stéen Java Sida 1 av 1

Föreläsning 14. Filhantering

F4. programmeringsteknik och Matlab

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

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

SMD 134 Objektorienterad programmering

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

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

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

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

Objektorienterad Programmering (TDDC77)

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

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

Input. Programmering. Andra källor

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

Nätverk och Java, grunder Föreläsning 0: 0: Introduktion till Internet

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

Datakommunika,on på Internet

att det finns inte något nätverk som heter Internet Finns Internet? Varför fungerar det då? Nätet? Jag påstår

Piff och Puffs Chatsystem

Transkript:

F5 Meddelandesändning med TCP EDA095 Nätverksprogrammering Roger Henriksson 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 TCPfö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 input output InputStream OutputStream Socket-objektet sköter övergripande egenskaper för uppkopplingen. Stream-objekten har hand om in-/utmatning av bytes. Stream-objekten skapas automatiskt. 5

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;... Koppla ned public void close() throws IOException; 7

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); } DEMO - SimpleTelnet 8

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; } 9

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

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. 6. Gå till steg 2 och vänta på ny uppkoppling. 11

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; 12

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 13

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()); Se kursboken och Javas klassdokumentation 14

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

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 Introducerat i Java 1.4. 16

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?

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 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

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>...

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.

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.

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.

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() 25

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