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



Relevanta dokument
Fördjupad Java. Undantagshantering. Fel

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

Föreläsning 14. Filhantering

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

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

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

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

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 10 7 dec 2015

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

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

F5 Meddelandesändning med TCP

Språkkonventioner och redigering av tal.

Tentamen Nätverksprogrammering Lösningsförslag

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

Föreläsning 5 Meddelandesändning med TCP

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.

Objektorienterad Programmering (TDDC77)

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

10 Kommunikation i Java

F8 Webbteknologier 1. Dynamiska webbsidor

Föreläsnings 9 - Exceptions, I/O

Tentamen Nätverksprogrammering Lösningsförslag

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

Föreläsning 5 Meddelandesändning med TCP

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Tentamen Nätverksprogrammering Lösningsförslag

2I1070 Lektion 2 Servlets och databaskopplingar Internetprogrammering 2I1049 Treskiktsarkitektur Klient-server med servlets

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

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

Webbservrar, severskript & webbproduktion

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

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

OOP Objekt-orienterad programmering

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

System.out.println("Jaså du har "+ antaldollar + " stycken.");

Input. Programmering. Andra källor

Lösningar för tenta 2 DAT043,

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

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

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Datakommunikation och Internet

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

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Ingenjörsfirman Stéen Java Sida 1 av 1

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

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

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

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

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Objektorienterad Programmering (TDDC77)

Tentamen Nätverksprogrammering Lösningsförslag

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

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

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

DAT043 Objektorienterad Programmering

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

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

Statistik från webbplatser

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

JAVAUTVECKLING LEKTION 7

Tentamen , Introduktion till Java, dtaa98, dtea53

Föreläsning 14. Träd och filhantering

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

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

EDA095 HTML. Per Andersson. April 26, Lund University Innehåll: HTML, CSS, DOM, JavaScript

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

F8 Meddelandesändning med UDP

Recitation 4. 2-D arrays. Exceptions

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Datainsamling över Internet

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

Modul 6 Webbsäkerhet

Föreläsning 3. Stack

Klassen javax.swing.timer

Lösningsförslag, tentamen FYTA11 Javaprogrammering

Klass och metoddesign. Skapa en OO-design. Kodkonvention. Hur kan man jobba med kodkvalité? Implementation. Bra klasser är grunden

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

F4. programmeringsteknik och Matlab

DUGGA: Objektorienterade applikationer. Läs detta! Uppgifterna är inte avsiktligt ordnade efter svårighetsgrad.

Instuderingsuppgifter läsvecka 6 - LÖSNINGAR

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

Lab 6: ASP.NET 2.0 Providermodellen

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

F1 Nätverk och meddelandesändning

Föreläsning 9-10 Innehåll

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Upplägg. Introduktion. Examination. Mål. Konsekvenser. Java. Kursen heter konstruktion, ej design eller formgivning.

Transkript:

Surfning Webbklienter och webbservrar Starta Firefox (eller Opera, eller Internet Explorer, eller... ). Skriv en URL i adressfältet: http://www.w3.org/history/1989/proposal.html. Webbläsaren kopplar upp sig mot webbservern på www.w3.org och skickar följande kommando: GET /History/1989/proposal.html Webbservern hittar filen proposal.html och skickar tillbaka den till webbläsaren. Webbläsaren läser HTML-koden, tolkar kommandona (taggarna) och visar filen i fönstret. Samma saker händer om man inte själv skriver en URL utan klickar på en länk. Webbklienter (webbläsare) är komplicerade: ska kunna koppla upp sig mot servrar och skicka rätt HTTP-kommandon till dem, ska kunna tolka HTML-koden som kommer från servern och visa resultatet på skärmen: text av olika storlek, länkar, bilder,... Webbservrar är också komplicerade: ska tillåta att klienter kopplar upp sig, ska kunna skicka tillbaka filer när klienten begär det, behöver inte bry sig om innehållet i filerna. En klient skriver man inte själv. En mycket förenklad server kan man skriva själv, så det gör vi. I Java. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 1 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 2 / 20 Specialskrivna webbservrar En generell webbserver har som huvuduppgift att skicka tillbaka dokument till klienten. Men man kan använda webben för att kommunicera med andra enheter, till exempel skrivare, switchar/routers, webbkameror,... Syftet kan vara att konfigurera enheten, övervaka arbetet,... Då har enheten en specialskriven webbserver som genererar dynamiska webbsidor. Kommunikation med sockets Två Unixprocesser som ska kommunicera med varandra gör det via sockets. Processerna kan finnas på olika datorer. En socket är ena ändpunkten av en kommunikationskanal. Man kan skriva på en socket eller läsa från en socket. En server väntar på uppkopplingar från klienter genom att lyssna på en port med ett bestämt nummer. När en klient kopplar upp sig får man en socket som kan utnyttjas för kommunikationen. I Java: ServerSocket server = new ServerSocket(portNbr); // create server Socket connection = server.accept(); // listen Klienter skapar sin egen socket genom att ange serverdatorns namn (eller IP-adress) och portnummer: Socket connection = new Socket(computerName, portnbr); På de följande sidorna finns dokumentation från java.sun.com. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 3 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 4 / 20

ServerSocket konstruktor public ServerSocket(int port) throws IOException Creates a server socket, bound to the specified port. A port of 0 creates a socket on any free port. The maximum queue length for incoming connection indications (a request to connect) is set to 50. If a connection indication arrives when the queue is full, the connection is refused. Parameters: port - the port number, or 0 to use any free port. IOException - if an I/O error occurs when opening the socket. SecurityException - if a security manager exists and its checklisten method doesn t allow the operation. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 5 / 20 ServerSocket accept() public Socket accept() throws IOException Listens for a connection to be made to this socket and accepts it. The method blocks until a connection is made. A new Socket is created and, if there is a security manager,... Returns: the new Socket IOException - if an I/O error occurs when waiting for a connection. SecurityException - if a security manager exists and its checklisten method doesn t allow the operation. SocketTimeoutException - if a timeout was previously set with setsotimeout and the timeout has been reached. IllegalBlockingModeException - if this socket has an associated channel,... Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 6 / 20 Socket konstruktor public Socket(String host, int port) throws UnknownHostException, IOException Creates a stream socket and connects it to the specified port number on the named host. If the specified host is null it is the equivalent of specifying the address as InetAddress.getByName(null). In other words, it is equivalent to specifying an address of the loopback interface. Parameters: host - the host name, or null for the loopback address. port - the port number. UnknownHostException - if the IP address of the host could not be determined. IOException - if an I/O error occurs when creating the socket. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 7 / 20 Strömmar för att läsa och skriva I Unix läser man data från en input-ström och skriver på en output-ström. I Java motsvaras strömmarna av objekt av klasserna InputStream respektive PrintWriter (eller PrintStream). Strömmarna kan kopplas till filer, sockets, tangentbord, datorskärm,... (System.in är ett InputStream-objekt, System.out är ett PrintStream-objekt.) Koppla strömmar till sockets och läs/skriv: Socket connection =...; InputStream in = connection.getinputstream(); PrintWriter out = new PrintWriter(connection.getOutputStream()); char ch = (char) in.read(); // read one character out.println("hello"); // write a string Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 8 / 20

Felhantering med exceptions En enkel server Fel som Javasystemet upptäcker rapporteras med Exception-objekt, undantagsobjekt. Du har sett flera exempel: FileNotFoundException, NullPointerException, ArrayIndexOutOfBoundsException. Man tar hand om undantag med try catch. Efter catch-blocken kan man skriva ett finally-block: satserna i det blocket utförs alltid, oavsett vad som inträffat tidigare. //... satser som kan ge XXXException catch (XXXException e) { //... satser som tar hand om felet finally { //... satser som alltid utförs På nästa bild finns klassen HelloWorldServer. Den beskriver en server som: Lyssnar på port 8089. Ialloändlighet: väntar (med accept()) på att en klient ska koppla upp sig, svarar med Hello, world!. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 9 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 10 / 20 HelloWorldServer (1) HelloWorldServer (2) import java.net.*; import java.io.*; class HelloWorldServer { public static void main(string[] args) { ServerSocket server = new ServerSocket(8089); while (true) { //... vänta på uppkoppling, svara //... med "Hello, world!" (nästa bild) catch (IOException e) { System.err.println("Could not start server. " + "Port occupied"); ServerSocket server = new ServerSocket(8089); while (true) { Socket connection = null; connection = server.accept(); PrintWriter out = new PrintWriter (connection.getoutputstream()); out.println("hello, world!"); out.close(); catch (IOException e) { finally { if (connection!= null) { connection.close(); Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 11 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 12 / 20

En enkel klient SimpleClient import java.net.*; import java.io.*; På nästa bild finns klassen SimpleClient. Den beskriver en klient som: kopplar upp sig mot servern som lyssnar på port 8089 på den dator där klienten körs (localhost), läser alla tecken som skickas från servern och skriver ut dem på System.out. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 13 / 20 class SimpleClient { public static void main(string[] args) { Socket connection = new Socket("localhost", 8089); InputStream in = connection.getinputstream(); int chcode = in.read(); while (chcode >= 0) { System.out.print((char) chcode); chcode = in.read(); in.close(); connection.close(); catch (IOException e) { System.err.println("Could not connect to server"); Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 14 / 20 SimpleWebServer2 SimpleWebServer3 Samma som HelloWorldServer, men följer HTTP-protokollet: Svarar alltid med en rubrik enligt HTTP-protokollet, sedan med HTML-kod (90 tecken): HTTP/1.0 200 OK Content-length: 90 Content-type: text/html <html> <head></head> <body> <H1><CENTER>Hello, world!</center></h1> </body> </html> Nästan samma som SimpleWebServer2: Inleder med att läsa tecknen i kommandot som klienten skickar till servern (GET filnamn och så vidare), skriver ut dem i kommandofönstret. Skickar sedan tillbaka rubriken och HTML-koden för Hello, world! Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 15 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 16 / 20

SimpleWebServer4 SimpleWebServer5 Nästan samma som SimpleWebServer3: Inleder också med att läsa kommandot som klienten skickar till servern, men plockar ut de första orden (strängarna cmd och filename) och skriver ut dem i kommandofönstret. Orden identifieras med hjälp av ett Scanner-objekt. Skickar sedan tillbaka Hello, world! Nästan samma som SimpleWebServer4: Letar reda på filen som efterfrågas i GET-kommandot och skickar tillbaka den till klienten. Alltså en riktig server! Använder Javaklassen File för att representera filen och en FileInputStream för att läsa från filen. Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 17 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 18 / 20 SimpleWebServer5! Apache Om programmering... Man måste bygga ut SimpleWebServer5 innan man kan börja sälja klassen: fler kommandon (HTTP innehåller mycket mera än GET), felhantering, stöd för CGI, PHP, Servlets,..., effektivitet (trådar, parallella processer). Programmeringen här är nästan trivial, bara några while-satser. Nästan all funktionalitet som vi behövde finns i färdigskrivna klasser. Vi har utnyttjat följande klasser: ServerSocket, Socket, PrintWriter, IOException, InputStream, Scanner, String, File, FileInputStream Mycket riktig programmering är av denna typ: leta i dokumentationen efter klasser som man kan utnyttja, läs på nätet, läs iböcker,... Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 19 / 20 Per Holm (Per.Holm@cs.lth.se) Skriv din egen webbserver 2011/12 20 / 20