Internetprogrammering En kort Introduktion

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

Nätverk grunder Föreläsning 1: 1: Introduktion till Internet

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

Björn Eiderbäck Kort om grundläggande nätverkskoncept Internet Socketar

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

Innehåll Appletar i Java

Administration: Grundläggande internetprogrammering

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

Grundläggande datavetenskap, 4p

Datakommunika,on på Internet

IT för personligt arbete F2

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

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

Datakommunikation och Internet

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

TCP/IP och Internetadressering

Datakommunika,on på Internet

Mattias Wiggberg 1. Orientera på Internet. IP-adress. IP-adresserna räcker inte... Mer om IP-adresser

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

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

10 Kommunikation i Java

Javas Exceptions. DD2385 Programutvecklingsteknik Fler bilder till föreläsning 7 23/ Kort om Javas Exceptions Trådar i Java

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

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

Tentamen Nätverksprogrammering Lösningsförslag

Tentamen Nätverksprogrammering Lösningsförslag

Internet. Internet hur kom det till? Internets framväxt. Ett hierarkiskt uppbyggt telenät Kretskopplat/circuit switching

Webbservrar, severskript & webbproduktion

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

F5 Meddelandesändning med TCP

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

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

Lite mer om CGI-programmering

Föreläsning 5 Meddelandesändning med TCP

Christer Scheja TAC AB

Föreläsning 5 Meddelandesändning med TCP

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

F8 Meddelandesändning med UDP

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

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

5 Internet, TCP/IP och Tillämpningar

Nätverksprogrammering. Tekniker för att skriva program som kommunicerar med varandra över ett nätverk. F1 Nätverk och strömmar.

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

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

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

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

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

Språkkonventioner och redigering av tal.

F1 Nätverk och meddelandesändning

Tentamen Nätverksprogrammering Lösningsförslag

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

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

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

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

F1 Nätverk och strömmar

Lösningar för tenta 2 DAT043,

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

Tentamen Nätverksprogrammering Lösningsförslag

Föreläsning 1 Nätverk och strömmar

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

Karlstads universitet Institutionen för Informationsteknologi Datavetenskap

Föreläsning 7. DD2390 Internetprogrammering 6 hp

Fördjupad Java. Undantagshantering. Fel

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

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

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

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

5 Internet, TCP/IP och Applikationer

Grundläggande nätverksteknik. F3: Kapitel 4 och 5

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 i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Tentamen Nätverksprogrammering Lösningsförslag

JAVAUTVECKLING LEKTION 7

1 PROTOKOLL. Nätverk. Agenda. Jonas Sjöström

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

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

Datainsamling över Internet

Input. Programmering. Andra källor

Övningar - Datorkommunikation

F1 Nätverk och meddelandesändning

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

Objektorienterad Programmering (TDDC77)

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

Föreläsning 5: ARP (hur hitta MAC-adress) Från applikation till applikation

Föreläsning 5: Stora datanät Från användare till användare ARP

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

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

F1 Nätverk och meddelandesändning

5. Internet, TCP/IP tillämpningar och säkerhet

Skriftlig tentamen i kursen TDTS04 Datornät och distribuerade system kl. 8 12

Datakursen PRO Veberöd våren 2011 internet

KomSys Hela kursen på en föreläsning ;-) Jens A Andersson

Laborationer, moment 4 5

Från användare till användare ARP. (Maria Kihl)

Objektorienterad programmering i Java

Karlstads universitet Institutionen för Informationsteknologi Datavetenskap

Webbserver och HTML-sidor i E1000 KI

Transkript:

Internetprogrammering En kort Introduktion Björn Eiderbäck bjorne@nada.kth.se Innehåll Kort om grundläggande nätverkskoncept Internet Socketar Referenser Harold, Java Network Programming, Elliotte Harold Hall, CORE Web Programming, Marty Hall Deitel et al, Internet and the World Wide Web How to Program http://www.w3schools.com http://java.sun.com/docs/books/tutorial/networking/index.html http://www.cincom.com/scripts/smalltalk.dll//downloads/index.ssp http://www.whysmalltalk.com/ previous next Vad är Internetprogrammering Internetprogrammering är en hel massa olika saker Konstruktion av websidor, via HTML, XHTML, XML med CSS, JavaScript, applets, plugins mm Socketprogrammering TCP/IP, UDP, Konstruktion av epostprogram SMTP, POP3, IMAP Serverprogrammering Med ASP, Servlets, CGI, SOAP, mm Webservices SOAP, WSDL, UDDI Användning av streamade media ljud, video Konstruktion av distribuerade tillämpningar Med RMI (JAVA), CORBA, SOAP och andra system/protokoll Mobila enheter och trådlösa nät Servrar, routrar, brandväggar mm Iptelefoni Osv, osv previous next 2 Björn Eiderbäck 1999-2003 1

På denna föreläsning kommer vi vi bara hinna med En bråkdel av allt det som togs upp på föregående sida Därför tar vi bara en kort historik och översikt (~första timmen) och fokuserar på socketprogrammering (~andra timmen) Som ju i viss mening är det fundament som alla andra andra Internetapplikationer vilar på Laborationen kommer dessutom bli en en enkel socketprogrammeringslab previous next 3 Programmering av nätverksapplikationer Varför nätverksapplikationer? Idag så ser vi ett allt större behov av applikationer som kan kommunicera mellan olika noder Ett exempel är WWW, email och news med mer asynkron kommunikation Andra exempel är distribuerade databaser, ljud, radio och video Vi har också behov av att bygga tillämpningar där vi mer direkt är medvetna om varandra delade anslagstavlor, whiteboards, delade ordbehandlare, styrssystem (robotar mm) och inte minst spel För att åstadkomma detta finns det stöd i dagens nätverk (tex i Internet som vi skall titta lite mer på) previous next 4 Björn Eiderbäck 1999-2003 2

På Internet Det finns massor av olika typer av siter Auktioner, reklam, vanliga köpordersiter, portaler med likartade siter samlade, affärer, musik, film, intressesiter, mjukvara, info, rapporter, böcker, sökmotorer, undervisning,... Olika typer av applikationer Email News Webbaserade Databaser Klient-server, peer-to-peer Fristående Telefon Video... Webens Webens historia historia http://www.w3.org/history.html http://www.w3.org/history.html http://www.hitmill.com/internet/web_history.asp http://www.hitmill.com/internet/web_history.asp previous next 5 Nätverk Ett nätverk är en samling av datorer eller annan utrustning Termer nod en maskin i nätverket (dator, skrivare, brygga, läskautomat, ) värd (eng. host) noder som är fullt fungerande datorer kallas för värdar adress varje nod i nätverket har en unik adress i form av en serie av bytes paket moderna nätverk är paket-baserade, dvs informationen bryts ner till och skickas som paket. Paketen hanteras därefter separat protokoll en uppsättning regler som specificerar hur kommunikationen i nätverket skall gå till previous next 6 Björn Eiderbäck 1999-2003 3

Internet Internet är det mest kända nätverket och idag det mest spridda Designat för att vara robust Första versionen konstruerat av ARPA en myndighet inom USAs försvar. Kallades då ARPANET som sedemera "växte" till Internet. (ARPANET) första versionen 1968. Då med ett fåtal anslutna datorer previous next 7 Lager (eng. layer) Ett nätverk har olika kommunikationslager Applikation (HTTP, FTP, Telnet, ) Transport (TCP, UDP, ) Nätverk (IP, ) Logisk förbindelse Fysiskt (Ethernet, FDDI, Local Talk, drivers, ) Applikation (HTTP, FTP, Telnet, ) Transport (TCP, UDP, ) Nätverk (IP, ) Som applikationsprogrammerare arbetar vi oftast i det övre lagret För speciella distribuerade tillämpningar arbetar vi också i Transportlagret Övriga lager behöver vi normalt inte bry oss om previous next 8 Björn Eiderbäck 1999-2003 4

IP, TCP och UDP IP, Internet Protocol protokollet som används på nätverksnivå av Internet TCP, Transport Control Protocol ett anslutningsbaserat protokoll som erbjuder tillförlitligt datautbyte mellan två noder UDP, User Datagram Protocol ett protokoll som tillåter skickande av oberoende paket av data från en nod till en annan utan att varken garantera att paketen kommer fram eller ordningen mellan dem är samma vid mottagandet som vid utskickandet previous next 9 IP-adress och DNS Varje dator på Internet identifieras med ett fyra-bytes (dvs 32 bitars) tal Många datorer har fasta nummer andra tilldelas temporära vid anslutning (tex vid anslutning via modem hemifrån) 32 bitar räcker till 2 32 = 4294967296 adresser men det räcker ändå inte så numera finns IPv6, med 128 bitars adresser, dvs 2 128 = 340282366920938463463374607431768211456 adresser (som ju bör räcka ett tag...fast inte riktigt till att adressera varje molekyl i universum...) DNS, Domain Name Server IP-adresser är svåra att komma ihåg för människor Därför konstruerades DNS som kan översätta mer lättihågkomna namn till IP-adresser Tex www.nada.kth.se blir 130.237.222.66 previous next 10 Björn Eiderbäck 1999-2003 5

Portar Varje dator med en IP-adress har ett antal logiska portar för att kommunicera med sin omgivning en port är ett 16-bitars tal, dvs ett tal mellan 0 och 65535 Vissa portar är reserverade portnummer mellan 0 och 1023 reserverade för speciella ändamål exempelvis är följande portnummer reserverade för viss service port 7 för eko port 20-21 för ftp port 23 för telnet port 25 för smtp (dvs skicka e-post) port 80 för HTTP (dvs den port som normalt används av en WEB-server) port 110 för pop3 (dvs ett protokoll för att läsa e-post) Senare i kursen skall vi se hur vi själva kan skriva program som kommunicerar med både fördefinierade och via portar med andra nummer previous next 11 Internet och Intranet Internet är världens största IP-baserade nätverk Massor av olika typer av datorer från alla kontinenter är anslutna Varje dator har (eller får vid anslutning) en unik IPadress med vilken den sedan identifieras Det finns också andra nätverk med ungefär samma uppbyggnad Man brukar tala om intranet för att benämna lokala nätverk inom en organisation previous next 12 Björn Eiderbäck 1999-2003 6

Klient-server-modellen Idag är en klient-server- (ibland klient-betjänt på svenska) modellen den förhärskande vid konstruktion av distribuerade, samarbetande tillämpningar en klient ber en server om en viss tjänst tex om att få reda på vad klockan är eller att skicka över en viss fil eller websida en server utför tjänster åt klienter tex svarar på vad klockan är, skickar över en fil eller websida från sitt lokala filsystem Alla typer av applikationer passar dock inte in i klient-server-modellen utan båda ändarna är både servrar och klienter samtidigt. Man brukar då prata om kommunikation peer-to-peer exempel en delad riteditor spel eller (det klassiska exemplet) telefonförbindelse previous next 13 För att programmera Internettillämpningar Kan man använda socketar Om man enbart använder Java: RMI CORBA, för språk och maskinoberoende distribuerade tillämpningar SOAP mm, för att använda ett XML-baserat protokoll previous next 14 Björn Eiderbäck 1999-2003 7

HTTP, HTML, XHTML, MIME och URL HTTP, Hypertext Transfer Protocol standarden som beskriver hur en webklient och server kommunicerar och utbyter data HTML, Hypertext Markup Language standardspråket för konstruktion av WEB-sidor XHTML, EXtensible HyperText Markup Language HTML blandat med XML med slutna parenteser och syntax MIME, Multipurpose Internet Mail Extensions den öppna standarden som beskriver hur multimedia skall skickas via e-post URL, Uniform Resource Locator definierar hur en fil otvetydigt kan refereras på Internet http://www.w3schools.com previous next 15 URL, URI och URN URI, Uniform Resource Identifier definierar hur en resurs otvetydigt kan refereras på Internet har undergrupperna URL och URN URL, Uniform Resource Locator refererar en adress på Internet ser ut så här: protokoll://värdnamn[:port]/väg/filnamn#avdelning exempel http://www.gt.kth.se/education/kurspm/4k1525/default.html#innehall URN, Uniform Resource Name en pekare till en viss resurs utan att ange dess aktuella placering previous next 16 Björn Eiderbäck 1999-2003 8

HTML och SGML HTML har sitt ursprung i SGML SGML skapades under tidigt 70-tal Man beskriver en texts semantik snarare än dess presentation HTML skapades under tidigt 90-tal Är lingua franca för att publicera hypertext på weben Har kommit i flera versioner och utvecklas forfranande Se gärna http://www.w3.org/ för mer information previous next 17 HTTP HTTP, Hypertext Transport Protocol standarden som beskriver hur en webklient och server kommunicerar och utbyter data använder MIME för att avkoda data använder TCP/IP för dataöverföring klienten skickar ett meddelande i stil med GET /index.html HTTP/1.1 för att hämta WEBsidan index.html från aktuell server Se gärna http://www.w3.org/protocols/ för mer information previous next 18 Björn Eiderbäck 1999-2003 9

MIME MIME, Multi Internet Mail Extension den öppna standarden som beskriver hur multimedia skall skickas via e-post anger typen för data som skickas, tex text plain html news postscript, pdf zip image jpeg, gif, tiff audio video mpeg quicktime previous next 19 CGI CGI, Common Gateway Interface Används av klienter för att kunna anropa program på servern CGI-program kan skrivas i många olika språk, tex Perl, C, BASIC eller AppleScript CGI-program körs som fristående processer initierade av HTTP-servern Ett CGI-program kan antingen köras utan argument eller ges argument via WEB-sida HTML inkluderar sätt att kommunicera med CGIprogram previous next 20 Björn Eiderbäck 1999-2003 10

Server Side Includes (SSI) Sidor som kan bearbetas av servern innan dom skickas till klienten Idag istället ASP (Active Server Pages) Servlets och JSP (Java Server Pages) SSP (Smalltalk Server Pages) och liknande previous next 21 Klienter och servrar (som sagts tidigare ) Dom flesta moderna nätverksprogram baseras på en klient-server-modell En server är ett program som erbjuder tjänster En klient är ett program som frågar en server om tjänster En server väntar på att klienter skall ansluta En klient initierar en "konversation" previous next 22 Björn Eiderbäck 1999-2003 11

Socketar Definition: En socket är en ändpunkt för en tvåvägskommunikation mellan två program som körs i nätverket. En socket är bunden till ett portnummer så att underliggande lager kan identifiera vart data skall skickas. Socketar finns av två typer Serversocketar som väntar på att klienter skall ansluta sig Klientsocketar som ansluter till servrar I Java representeras socketar av klasserna ServerSocket och Socket previous next 23 Varför socketar Ger oss möjlighet att på ett smidigt och uniformt sätt kommunicera mellan maskiner av olika typer Möjliggör programspråksoberoende kommunikation Enkelt att få program som är skrivna i olika programspråk att kommunicera previous next 24 Björn Eiderbäck 1999-2003 12

Socketar typiskt klientprogram 1. Skapa en socket. 2. Öppna in- och utström mot socketen. 3. Läs från och skriv på socketen. 4. Stäng strömmarna. 5. Stäng socketen. previous next 25... 1. Socket socket = new Socket(HOSTNAME, PORT); 2. out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader( new InputStreamReader( socket.getinputstream())); 3. while ((userinput = stdin.readline())!= null) {out.println(userinput); System.out.println("från servern:" + in.readline());; 4. in.close(); out.close(); 5. socket.close(); previous next 26 Björn Eiderbäck 1999-2003 13

Socketar typiskt serverprogram 1. Skapa en server-socket. 2. Lyssna efter anslutande klienter 3. Skapa socket mot varje anslutande klient 4. Öppna in- och utström mot klientsocketerna. 5. Läs från och skriv på klientsocketen. 6. Stäng strömmarna. 7. Stäng klientsocketerna. 8. Stäng serversocketen. previous next 27 Exempel enkel server/klient app: servern /* Deklarera en serversocket: theserver (som lyssnar efter klienter), klientsocket: theconnection (som tar hand om ansluten klient), utdataström: p (för att skicka information till klienten) */ ServerSocket theserver; Socket theconnection; PrintWriter p; //Öppna serversocket på PORTNUMMER theserver = new ServerSocket(PORTNUMMER); while (VILLKOR) {//Så länge som VILLKOR är sant fortsätter vi theconnection = theserver.accept(); //Vänta till klient ansluter p = new PrintWriter(theConnection.getOutputStream()); p.println(information); //Skicka INFORMATION till klienten theconnection.close(); // avbryt förbindelsen med klienten theserver.close(); //Stäng serversocketen previous next 28 Björn Eiderbäck 1999-2003 14

... exempel kod (server) import java.net.*; import java.io.*; import java.util.date; public class DayTimeServer { public final static int daytimeport = 4711; public static void main(string[] args) { ServerSocket theserver; Socket theconnection; PrintWriter p; try { theserver = new ServerSocket(daytimePort); //forts nästa sida previous next 29... try { while (true) { theconnection = theserver.accept(); System.out.println("Connection: "+ theconnection); p = new PrintWriter( theconnection.getoutputstream()); p.println(new Date()); theconnection.close(); //end while catch (IOException e) { theserver.close(); System.err.println(e); catch (IOException e) {System.err.println(e); previous next 30 Björn Eiderbäck 1999-2003 15

Exempel enkel server/klient app: klienten /* Deklarera en socket: thesocket (som ska anslutas till servern), namn på severn: hostname (dvs servermaskinens ipadress), indataström: inputstream (för att ta emot information från servern) */ Socket thesocket; String hostname; DataInputStream inputstream; //Skapa socket thesocket = new Socket(hostname, 4711); //indataström som läser från socketen inputstream = new DataInputStream(theSocket.getInputStream()); // ta emot information från servern String thetime = inputstream.readline(); System.out.println("It is " + thetime + " at " + hostname); thesocket.close(); previous next 31... exempel kod (klient) import java.net.*; import java.io.*; public class DaytimeClient { public static void main(string[] args) { Socket thesocket = null; String hostname; DataInputStream inputstream; if (args.length > 0) { hostname = args[0]; else { //om ingen ip-adress ges så använder vi lokala maskinens hostname = "localhost"; previous next 32 Björn Eiderbäck 1999-2003 16

... try { thesocket = new Socket(hostname, 4711); inputstream = new DataInputStream(theSocket.getInputStream()); String thetime = inputstream.readline(); System.out.println("It is " + thetime + " at " + hostname); // end try catch (UnknownHostException e) { System.err.println(e); catch (IOException e) { System.err.println(e); finally {try {thesocket.close(); catch (IOException e) { previous next 33 Fasta portar Vi kan ansluta oss till fasta portar med på förhand given service på dom flesta datorer Tex 25 för mail 144 för news 23 för telnet En användbar port för att testa förbindelser eller egen klient är echo-porten nr: 7 Port 0-1023 reserverade för speciella typer av service tex port 80 är den normala WWW-porten previous next 34 Björn Eiderbäck 1999-2003 17

Importera klasser för io och nät Enkelt test import java.io.*; import java.net.*; public class EchoClient { public static void main(string[] args) throws IOException { Socket echosocket = null; PrintWriter out = null; BufferedReader in = null; Ett Ett exempel som som ansluter ansluter sig sig till till standardservicen echo echo (på (på port port 7) 7) som som helt helt enkelt enkelt bara bara skickar skickar tillbaks tillbaks den den text text man man skickar skickar till till den. den. Skapa klient kopplad mot en av NADAs datorer Samt in- och utström try { echosocket = new Socket("faun.nada.kth.se", 7); out = new PrintWriter(echoSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream())); catch (UnknownHostException e) { System.err.println("Don't know about host: faun."); System.exit(1); catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: faun."); System.exit(1); previous next 35... Ström mot terminalen Så länge som användaren ger input skicka det hela till socketen, läs svaret samt eka det på terminalen BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String userinput; try { while ((userinput = stdin.readline())!= null) { out.println(userinput); System.out.println("echo: " + in.readline()); out.close(); in.close(); stdin.close(); echosocket.close(); catch (IOException e) { previous next 36 Björn Eiderbäck 1999-2003 18

En klient som ansluter till en server och hämtar angiven URL Ett Ett exempel med med ett ettklientprogram som somansluter anslutertill till angiven angivenurl och och hämtar hämtarinnehållet i i aktuell aktuellfil. fil. Utmatningen sker skerantingen till till given given fil fileller ellertill till terminalen. import java.io.*; import java.net.*; Första argumentet URL:en Andra argumentet eventuell fil dit utmatningen skall ske public class HttpClient { public static void main(string[] args) { try { if ((args.length!= 1) && (args.length!= 2)) throw new IllegalArgumentException("Wrong number of arguments"); OutputStream to_file; if (args.length == 2) to_file = new FileOutputStream(args[1]); else to_file = System.out; previous next 37 Dela upp URL:en på sina beståndsdelar... Skapa socket mot angiven värd och port URL url = new URL(args[0]); String protocol = url.getprotocol(); if (!protocol.equals("http")) throw new IllegalArgumentException("URL must use 'http:' protocol"); String host = url.gethost(); int port = url.getport(); if (port == -1) port = 80; // om ingen port given använd defaultporten String filename = url.getfile(); Socket socket = new Socket(host, port); Skapa in- och utmatningsström mar mot servern Skicka förfrågan till servern mha GET InputStream from_server = socket.getinputstream(); PrintWriter to_server = new PrintWriter(new OutputStreamWriter(socket.getOutputStream())); to_server.println("get " + filename); to_server.flush(); // Se till att det hela skickas på en gång! previous next 38 Björn Eiderbäck 1999-2003 19

Skapa buffert för att läsa det servern skickar... byte[] buffer = new byte[4096]; int bytes_read; Så länge som det finns något att läsa skriv det på fil (eller terminal) while((bytes_read = from_server.read(buffer))!= -1) to_file.write(buffer, 0, bytes_read); Stäng förbindelse socket.close(); to_file.close(); catch (Exception e) { System.err.println(e); System.err.println("Usage: java HttpClient <URL> [<filename>]"); previous next 39 Skapa serversocket på angiven port Vänta till klient ansluter En enkel WEB-server som bara ekar frågor som ställs till den En En enkel enkelserver som sombara baraekar ekarfrågor frågorsom somställs ställstill till den. den. Kan Kan bla bla användas för för att att se se hur hur en en fråga fråga från från en en WEB-läsare ser serut ut eller eller hur hur data data skall skall skickas skickas tillbaks tillbaks från från en en server. server. import java.io.*; import java.net.*; public class HttpMirror { public static void main(string args[]) { try { int port = Integer.parseInt(args[0]); ServerSocket ss = new ServerSocket(port); Argumentet Argumentet anger anger den den port port som som servern servern skall skall köra köra på på for(;;) { Vi Vi kör kör om om och och om om igen igen ända ända tills tills servern servern termineras termineras (med (med tex tex CTRL-C) CTRL-C) Socket client = ss.accept(); previous next 40 Björn Eiderbäck 1999-2003 20

... Skapa in- och utmatningsström mar mot klienten BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream())); PrintWriter out = new PrintWriter(new OutputStreamWriter(client.getOutputStream())); Skicka över protokollinformation till klienten Läs från klienten och eka tillbaks det out.println("http/1.0 200 "); // Version & statuskod out.println("content-type: text/plain"); // typen på data som vi skickar out.println(); // Slut på huvudet out.flush(); String line; while((line = in.readline())!= null) { if (line.length() == 0) break; out.println(line); previous next 41... out.close(); in.close(); client.close(); catch (Exception e) { System.err.println(e); System.err.println("Usage: java HttpMirror <port>"); Kör Kör genom genom att att 1) 1) starta starta programmet på på den den lokala lokala datorn datorn java javahttpmirror 4444 4444 2) 2) Öppna Öppna klient klient mot mot servern från från vanlig vanlig web-läsare http://localhost:4444 http://localhost:4444 Ge Ge eventuellt argument och och se se hur hur detta detta ter ter sig sig http://localhost:4444/test?arg1?arg2 previous next 42 Björn Eiderbäck 1999-2003 21

Exempel: Lyssna och skriv info (server) import java.net.*; import java.io.*; class JustListen { public static void main(string [] args) { try { ServerSocket ssock = new ServerSocket(1234); while (true) { Socket sock = ssock.accept(); printinfo(sock); sock.close(); catch(ioexception e) {System.err.println(e); private static void printinfo(socket s) { System.out.println("Remote (server) port: " + s.getport()); System.out.println("Local (client) port: " + s.getlocalport()); System.out.println("Server IP addr: " + s.getinetaddress()); System.out.println("Client IP addr: " + s.getlocaladdress()); previous next 43... Klient import java.net.*; import java.io.*; public class JustListenClient { public static void main(string[] args) { if (args.length < 1) { System.err.println("JustListenClient <IP address of server>"); return; try { Socket sock = new Socket(args[0], 1234); sock.close(); catch(ioexception e) {System.err.println(e); previous next 44 Björn Eiderbäck 1999-2003 22

Vi tittar på några andra exempel Reverse och ReverseClient Vi skriver socketar i Smalltalk oxå! För att illustrera likheter Vi testar echo-exemplet Vi gör en ReverseClient i Smalltalk också Som använder Java-servern Reverse previous next 45 Exempel: Reverse import java.net.*; import java.io.*; public class Reverse { public static void main(string[] args) { ServerSocket ssock = null; try {ssock = new ServerSocket(3456); catch(ioexception e) {System.err.println(e); return; System.out.println("Server running..."); while (true) { try { Socket sock = ssock.accept(); BufferedReader in = new BufferedReader( new InputStreamReader(sock.getInputStream())); String t = in.readline(); if (t!= null) {// something read? PrintWriter ps = new PrintWriter(sock.getOutputStream()); ps.println(new String(new StringBuffer(t).reverse())); ps.flush(); sock.close(); catch(ioexception e) {System.err.println(e); previous next 46 Björn Eiderbäck 1999-2003 23

Exempel: ReverseClient import java.net.*; import java.io.*; public class ReverseClient { public static void main(string [] args) { if (args.length < 1) { System.err.println("ReverseClient <IP address of server>"); return; try { String s = "In the Quiet Morning"; Socket sock = new Socket( args[0], 3456 ); PrintWriter out = new PrintWriter( sock.getoutputstream() ); out.println(s); out.flush(); BufferedReader in = new BufferedReader( new InputStreamReader(sock.getInputStream())); String t = in.readline(); if (t!= null) System.out.println("To server: " + s + "\nfrom server: " + t); sock.close(); catch(ioexception e) {System.err.println(e); previous next 47 Exempel: echo i Smalltalk servername := 'faun.nada.kth.se'. Ta reda på vilken port echo kör på port := IPSocketAddress serviceportbyname: 'echo'. Skapa klientsocket mot given server och port socket := SocketAccessor defaultclass newtcpclienttohost: servername port: port. Skapa läs och skrivström stream := socket readappendstream. Skriv något och läs svaret stream nextputall: 'Hello World!'; cr. reply := stream nextline. Stäng och ta hand om resultatet stream close. reply previous next 48 Björn Eiderbäck 1999-2003 24

Exempel: ReverseClient i Smalltalk reversesocket := SocketAccessor defaultclass newtcpclienttohost: 'localhost port: 3456. reversestream := reversesocket readappendstream. reversestream nextputall: 'Hello World!'; cr. reply := reversestream nextline. reversestream close. reply previous next 49 Distributionspaket RMI Distributionspaket för Java http://java.sun.com/docs/books/tutorial/rmi/index.html OpenTalk Distributionspaket för VisualWorks\Smalltalk CORBA... Generellt språk- och plattformsoberoende distributionspaket http://www.corba.org http://www.omg.org previous next 50 Björn Eiderbäck 1999-2003 25