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

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

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

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

F8 Meddelandesändning med UDP

F9 Meddelandesändning med 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

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

Fördjupad Java. Undantagshantering. Fel

10 Kommunikation i Java

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

Tentamen Nätverksprogrammering Lösningsförslag

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.

Datakommunikation och Internet

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

Tentamen Nätverksprogrammering Lösningsförslag

Språkkonventioner och redigering av tal.

JAVAUTVECKLING LEKTION 7

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

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

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

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

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

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

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

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

OOP Objekt-orienterad programmering

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

Java Direkt, upplaga 5 Innehåll

Laborationer, moment 4 5

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

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

Laborationer, moment 4 5

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

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

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

F4. programmeringsteknik och Matlab

DEL 2 - Praktiska programmeringsuppgifter

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

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

Gästföreläsningen. Synpunkter?

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

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

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

OOP Objekt-orienterad programmering

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

Tentamen Nätverksprogrammering Lösningsförslag

Java Direkt, upplaga 7 Innehåll

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

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

SMD 134 Objektorienterad programmering

Lösningar för tenta 2 DAT043,

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

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

Klasser för grafik och bildhantering

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

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

Java Direkt, upplaga 6 Innehåll

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

Input. Programmering. Andra källor

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

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

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

Tentamen ID1004 Objektorienterad programmering May 29, 2012

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

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

Gästföreläsningen. Synpunkter?

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

Ingenjörsfirman Stéen Java Sida 1 av 1

Laboration D, Nätverkskommunikation

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

Föreläsning 14. Filhantering

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

Transkript:

Java I/O Strömmar och filer F2 Java I/O - strömmar Meddelandesändning med TCP EDA095 Roger Henriksson Datavetenskap Lunds universitet 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. Strömmar i Java utmatning OutputStream InputStream FileOutputStream FilterOutputStream ObjectOutputStream FileInputStream FilterInputStream ObjectInputStream DataOutputStream CipherOutputStream* BufferedInputStream DataInputStream CipherInputStream* BufferedOutputStream PrintStream Endast en delmängd Endast en delmängd 3 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() public int read(byte[] input) public int read(byte[] input,int offset,int length) public long skip(long n) public int available() public void close() 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) public void write(byte[] data) public void write(byte[] data, int offset, int length) public void flush() public void close() 5 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); 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: Motsvarande för utmatning: OutputStream os = ; BufferedOutputStream = new BufferedOutputStream(os); 7 klient buffert Meddelanden kan fastna i bufferten! server 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(); 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 Alla operationer kan generera ett IOException. 9 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): 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. 11 12

Socket modell ell Modell 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. Socket Konstruktorer public Socket(String host, int port) throws UnknownHostException, IOException; public Socket(InetAddress host,int port) Get-metoder public InputStream getinputstream() public OutputStream getoutputstream() public InetAddress getinetaddress(); public int getport(); public InetAddress getlocaladdress(); public int getlocalport(); 13 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() 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) 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; 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); 17 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. ServerSocket, fortsättning Konstruktorer public ServerSocket(int port) public ServerSocket(int port, int queuelength) Vänta på en uppkoppling public Socket accept() Koppla ned servern public void close() 19 20

ServerSocket, fortsättning Get-metoder public InetAddress getinetaddress(); public int getlocalport(); public int getsotimeout() Set-metoder public void setsotimeout(int timeout) DEMO - ToUpperServer 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! 21 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! 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. 23 24

Icke-blockerande I/O i C Internetradio anno 1992 på Datavetenskap. Icke-blockerande I/O i Java Nya Javaklasser i paketen java.nio och java.nio.channels: raclient.c raserver.c anslutning InetSocketAddress ServerSocketChannel SocketChannel ByteBuffer Selector SelectorKey Se kursboken, kapitel 12. 25 26 Exempel: Echo server Java Network Programming (3rd ed.) sid 407-408 DEMO EchoServer 27