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

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

F5 Meddelandesändning med TCP

Föreläsning 5 Meddelandesändning med TCP

Föreläsning 5 Meddelandesändning med TCP

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

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

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

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

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

F1 Nätverk och meddelandesändning

F1 Nätverk och meddelandesändning

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

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

F1 Nätverk och meddelandesändning

Tentamen Nätverksprogrammering Lösningsförslag

Fördjupad Java. Undantagshantering. Fel

10 Kommunikation i Java

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

Föreläsning 6. Designmönstret Decorator I/O-ramverket

Språkkonventioner och redigering av tal.

JAVAUTVECKLING LEKTION 7

Datakommunikation och Internet

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Ö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

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

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

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

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

OOP Objekt-orienterad programmering

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

Laborationer, moment 4 5

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

Laborationer, moment 4 5

2I1073 Föreläsning 3. Säkerhet. Kryptering

Java Direkt, upplaga 5 Innehåll

DEL 2 - Praktiska programmeringsuppgifter

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

Gästföreläsningen. Synpunkter?

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

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

OOP Objekt-orienterad programmering

F4. programmeringsteknik och Matlab

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

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

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

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

Ingenjörsfirman Stéen Java Sida 1 av 1

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

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

Java Direkt, upplaga 7 Innehåll

Erfarenheter från biljardprojektet. måndag 23 november 15

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

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

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

Lösningar för tenta 2 DAT043,

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

SMD 134 Objektorienterad programmering

Klasser för grafik och bildhantering

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

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

Java Direkt, upplaga 6 Innehåll

Input. Programmering. Andra källor

Föreläsning 12. Inre klasser Anonyma klasser Kloning I/O-ramverket

Classes och Interfaces, Objects och References, Initialization

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

Gästföreläsningen. Synpunkter?

TENTAMEN OOP

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Tentamen ID1004 Objektorienterad programmering May 29, 2012

Objektorienterad Programmering DAT043. Föreläsning 11 19/2-18 Moa Johansson (delvis baserat på Fredrik Lindblads material)

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.

17.9 Funktioner för avbildningstabeller

Hur ser ett Java-program ut?

Transkript:

F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Nätverksprogrammering Roger Henriksson Datavetenskap Lunds universitet

Java I/O Strömmar och filer Ström (eng. Stream) En ström är en sekvensiell följd av bytes (tecken). In- och utmatning sker oftast i form av strömmar: Inmatning från tangentbordet, utskrift till ett terminalfönster. Vi kan skriva bytes till strömmar och vi kan läsa bytes från strömmar. Vi kan upprätta strömmar över ett nätverk: TCP Fil (eng. File) En fil är en ström som lagrats på ett sekundärminne. Exempel: Era Javaprogram är lagrade i textfiler. 2

Strömmar i Java inmatning Klasserna för att hantera strömmar finns i paketet java.io. InputStream FileInputStream FilterInputStream ObjectInputStream BufferedInputStream DataInputStream CipherInputStream* Endast en delmängd... 3

Strömmar i Java utmatning OutputStream FileOutputStream FilterOutputStream ObjectOutputStream DataOutputStream CipherOutputStream* BufferedOutputStream PrintStream Endast en delmängd... 4

InputStream Abstrakt klass som representerar en inkommande ström. Superklass till övriga InputStream-klasser. Innehåller metoder för att läsa bytes. public int abstract read() throws IOException; public int read(byte[] input) throws IOException; public int read(byte[] input,int offset,int length) throws IOException; public long skip(long n) throws IOException; public int available() throws IOException; public void close() throws IOException; 5

OutputStream Abstrakt klass som representerar en utgående ström. Superklass till övriga OutputStream-klasser. Innehåller metoder för att skriva bytes. public abstract void write(int b) throws IOException; public void write(byte[] data) throws IOException; public void write(byte[] data, int offset, int length) throws IOException; public void flush() throws IOException; public void close() throws IOException; 6

Filter Objekt av subklasserna till FilterInputStream och FilterOutputStream kan kopplas ihop (kedjas ihop) med InputStream- respektive OutputStream-objekt för att utöka deras funktionalitet. Exempel: Använd en BufferedInputStream för att öka prestanda vid inläsning från fil: InputStream is =...; BufferedInputStream bis = new BufferedInputStream(is); Motsvarande för utmatning: OutputStream os =...; BufferedOutputStream = new BufferedOutputStream(os); 7

Buffring Buffring av strömmar ökar effektiviteten högre genomströmning per tidsenhet. Ju mer data som sänds / tas emot åt gången ju färre underliggande systemanrop / diskaccesser / nätverkspaket. Klasserna BufferedInputStream / BufferedOutputStream implementerar buffring. VARNING: Glöm inte att anropa flush()! Risk för dödläge: buffert klient server Meddelanden kan fastna i bufferten! 8

Data(Input/Output)Stream Subklasser till FilterInputStream/FilterOutputStream. Kan användas om man vill skriva annat än bytes på en ström. De konverterar mellan bytes och olika andra datatyper. public void writeboolean(boolean b); public void writebyte(int b); public void writeshort(int s); public void writechar(int c); public void writeint(int i); public void writelong(long l); public void writefloat(float f); public void writedouble(double d); public void writechars(string s); public void writebytes(string s); public void writeutf(string s); public boolean readboolean(); public byte readbyte(); public char readchar(); public short readshort(); public int readint(); public long readlong(); public float readfloat(); public double readdouble(); public String readutf(); Alla operationer kan generera ett IOException. 9

UDP Protokoll för att skicka korta meddelanden i form av paket. Begränsad paketstorlek måste stycka upp det som ska överföras i flera mindre paket. Ingen garanti att paket kommer fram alls. Ingen garanti att paket kommer fram i rätt ordning. Besvärligt att implementera mera komplicerade protokoll där en transaktion kräver flera meddelanden. Okopplat (unconnected) protokoll 10

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): 11

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

Socket modell ell Modell 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. 13

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(); 14

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

Skapa en socket (klient) Socket socket = null; InputStream input = null; OutputStream output = null; try { socket = new Socket("www.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 16

Att läsa stora block 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; } 17

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); } 18

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

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

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 21

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, kapitel 4, och Javas klassdokumentation! 22

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, kapitel 4, och Javas klassdokumentation! 23

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

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

Icke-blockerande I/O i Java Nya Javaklasser i paketen java.nio och java.nio.channels: InetSocketAddress ServerSocketChannel SocketChannel ByteBuffer Selector SelectorKey Se kursboken, kapitel 12. 26

Exempel: Echo server Java Network Programming (3rd ed.) sid 407-408 DEMO EchoServer 27