Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

© Kozsik Tamás 2000-2006 Hálózati alkalmazások A Java egyik fő erőssége Célok –Kliens-szerver architektúra –Elosztott rendszer Lehetőségek –Appletek –Szervletek.

Hasonló előadás


Az előadások a következő témára: "© Kozsik Tamás 2000-2006 Hálózati alkalmazások A Java egyik fő erőssége Célok –Kliens-szerver architektúra –Elosztott rendszer Lehetőségek –Appletek –Szervletek."— Előadás másolata:

1 © Kozsik Tamás Hálózati alkalmazások A Java egyik fő erőssége Célok –Kliens-szerver architektúra –Elosztott rendszer Lehetőségek –Appletek –Szervletek –TCP/IP vagy UDP –RMI, CORBA

2 © Kozsik Tamás Internet hálózatok Számítógépek azonosítása: IP cím –32 bites szám, pl –Neveket rendelünk a gépekhez: DNS Szerver programok azonosítása –IP cím mellett egy portszám is, –0-1023: rendszergazda jog kell hozzájuk –1-255: általánosan elterjedt szolgáltatások HTTP - 80, TELNET - 23, SSH - 22, stb.

3 © Kozsik Tamás IP, TCP, UDP IP: csomagkapcsolt - az alap UDP: szintén csomagkapcsolt (mint egy levél) –Az IP jellemzőit örökli (pl. csomagméret korlátozás) –A csomagok érkezési sorrendje nem definiált –Csomagok el is veszhetnek –Nincs visszaigazolás a fogadótól –Hatékony TCP: kapcsolat-elvű (mint egy telefonbeszélgetés) –Garantálja, hogy minden elküldött információ a küldés sorrendjében megérkezik –Sok erőforrás (IP csomagok visszaigazolása, stb.)

4 © Kozsik Tamás Kliens-szerver architektúra Asszimetrikus kapcsolatfelvétel –Szerver: passzív egy gép egy portján várja a kliensek kapcsolatfelvételi igényét –Kliens: aktív ismeri a szerver helyét, kezdeményezi a kapcsolatot Kommunikáció: már szimmetrikus –Mindketten küldhetnek információt a másiknak Egy szerverhez több kliens egy időben

5 © Kozsik Tamás Socket A BSD UNIX világból származik A kommunikációs csatorna végpontjai java.net.Socket –írni lehet rá, ami elmegy a másik gépre a másik folyamatnak –olvasni lehet róla, amit a másik gépen a másik folyamat ír

6 © Kozsik Tamás Számítógép Program Socket Input Stream Output Stream Input Stream Output Stream

7 © Kozsik Tamás TCP kapcsolat kiépítése Szerver: –java.net.ServerSocket létrehozása adott porton –kliens várása –a létrejött kapcsolatot egy Socket reprezentálja Kliens –egy Socket létrehozása: adott számítógép adott portján figyelő szerverprogramra való rácsatlakozás

8 © Kozsik Tamás Java-ul Szerver ServerSocket ss = new ServerSocket(1234); Socket s = ss.accept(); Kliens Socket s = new Socket("www.elte.hu",80);

9 © Kozsik Tamás Kommunikáció a kapcsolat felépítése után Mind a kliensen, mind a szerveren lekérjük a bemeneti és kimeneti csatornákat –A kliens Socket-jának kimenetije rá van csatlakoztatva a szerver Socket-jának bemenetijére –és fordítva... –Ezeken keresztül lehet kommunikálni InputStream is = s.getInputStream(); OutputStream os = s.getOuputStream();

10 © Kozsik Tamás import java.net.*; import java.io.*; public class Böngésző { public static void main(String[] args) throws IOException { Socket s = new Socket("www.elte.hu", 80); InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); PrintWriter out = new PrintWriter( new OutputStreamWriter(os) ); BufferedReader in = new BufferedReader( new InputStreamReader(is) ); out.println("GET /index.html HTTP/1.0"); out.println(); out.flush(); String line; while ((line = in.readLine()) != null) System.out.println(line); in.close(); out.close(); s.close(); }

11 © Kozsik Tamás import java.net.*; import java.io.*; public class Ismétlő { public static void main(String[] args) throws IOException { ServerSocket ss = new ServerSocket(1234); Socket s = ss.accept(); InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); PrintWriter out = new PrintWriter( new OutputStreamWriter(os) ); BufferedReader in = new BufferedReader( new InputStreamReader(is) ); String line; while ((line = in.readLine()) != null){ out.println(line); out.flush(); } in.close(); out.close(); s.close(); }

12 © Kozsik Tamás Feladat Írj chat programot. Paraméter nélkül elindítva szerverként viselkedjen. A kliens elindításához parancssori argumentumban kell megadni a szerver IP címét. Ha nem AWT-s programot írsz, hanem alfanumerikusat, akkor két végrehajtási szálat kell írnod! Írd meg úgy, hogy egyszerre több kliens is lehessen összekapcsolódva! Ehhez többszálú programot kell írnod!

13 © Kozsik Tamás HTTP Hypertext Transfer Protocol TCP/IP feletti réteg Kérés-válasz protokoll Szöveges HTTP/1.0 vagy HTTP/1.1 kérés/válasz, fejlécek, üres sor, törzs fejléc: kulcs: érték(ek) HTTP/1.0 esetén nem kötelező fejlécmezőt küldeni, HTTP/1.1 esetén „Host” kötelező

14 © Kozsik Tamás HTTP kérés HTTP/1.0 –GET, POST, HEAD HTTP/1.1 –PUT, DELETE, OPTIONS, TRACE, CONNECT

15 © Kozsik Tamás HTTP válasz 1xx: Informational - a kérés feldolgozás alatt 2xx: Success - sikeres végrehajtás 3xx: Redirection - a válasz előállításához további tevékenységek szükségesek 4xx: Client Error - hibás, illetve teljesíthetetlen kérés –404: Not found 5xx: Server Error - a szerver saját hibájából nem képes a helyes kérés megválaszolására

16 © Kozsik Tamás HTTP fejlécek User-agent: Mozilla/3.0Gold Server: Apache/1.2b3-dev Last-Modified: Fri, 31 Dec :59:59 GMT Content-Type: image/gif Content-Length: 1527 Date: Fri, 31 Dec :59:59 GMT

17 © Kozsik Tamás HTTP/1.1 kliens Kell a Host fejléc –Host: –Egy IP címhez több HTTP szerver tartozhat Chunked Transfer-Encoding Perzisztens TCP kapcsolat 100 Continue

18 © Kozsik Tamás Chunked Transfer-Encoding HTTP/ OK Date: Fri, 31 Dec :59:59 GMT Content-Type: text/plain Transfer-Encoding: chunked 1a; ignore-stuff-here abcdefghijklmnopqrstuvwxyz abcdef 0 some-footer: some-value another-footer: another-value [blank line here]

19 © Kozsik Tamás Perzisztens TCP kapcsolat Egy megnyitott kapcsolaton több kérés/válasz Connection: close fejléc, ha nem akarunk perzisztens kapcsolatot A szerver is küldhet ilyen választ, és utána zárja is a kapcsolatot

20 © Kozsik Tamás Continue Jelzi, hogy a szerver nemsokára küldi az igazi választ Feldolgozás: általában figyelmen kívül hagyjuk HTTP/ Continue HTTP/ OK Date: Fri, 31 Dec :59:59 GMT Content-Type: text/plain Content-Length: 42...

21 © Kozsik Tamás HTTP/1.1 szerver Host fejléc megkövetelése Abszolút URL a kérésben (proxy) Chunked data a kérésben Perzisztens kapcsolat, Connection fejléc Continue üzenetek küldése Date header (caching) –Date: Fri, 31 Dec :59:59 GMT If-Modified-Since: és If-Unmodified-Since: fejlécek a kérésben Válaszolni legalább a GET és HEAD kérésekre Elfogadni HTTP/1.0-s kéréseket

22 © Kozsik Tamás Formok feldolgozása, CGI POST: a kérés törzsében mennek a form adatai –egy CGI program a szabványos bemenetről olvashatja be GET: a kérés URL-ben vannak elkódolva a form adatai –egy CGI program a QUERY_STRING környezeti változóban kapja meg –GET /path/script.cgi?field1=value1&field2=value2 HTTP/1.0 –URL encoding (=, &, %, +, non-printable ch) name=Lucy&neighbors=Fred+%26+Ethel

23 © Kozsik Tamás SMTP TCP/IP feletti réteg Szöveges protokoll SMTP szerver általában a 25-ös porton telnettel könnyen kipróbálható

24 © Kozsik Tamás telnet localhost 25 Trying Connected to picasso ( ). Escape character is '^]'. 220 localhost.localdomain ESMTP Sendmail /8.11.2; Mon, 8 Mar :02: ehlo picasso.elte.hu 250-localhost.localdomain Hello picasso [ ], pleased to meet you 250-ENHANCEDSTATUSCODES 250-8BITMIME 250-SIZE 250-DSN 250-ONEX 250-ETRN 250-XUSR 250 HELP mail from:

25 © Kozsik Tamás HELP mail from: Sender ok rcpt to: Recipient ok data 354 Enter mail, end with "." on a line by itself To: Kovacs Istvan From: Gipsz Jakab Subject: Ez nem spam!!! Szia haver! Na mi ujsag? gipsz i28H5G Message accepted for delivery

26 © Kozsik Tamás i28H5G Message accepted for delivery quit localhost.localdomain closing connection Connection closed by foreign host.

27 © Kozsik Tamás Datagram Az UDP protokoll megvalósítása: DatagramSocket és DatagramPacket Példa: kliens küld szervernek, szerver visszaküldi dátummal Multicast lehetőség

28 © Kozsik Tamás DatagramSocket socket = new DatagramSocket(); byte[] buf; buf = args[1].getBytes(); InetAddress address = InetAddress.getByName(args[0]); DatagramPacket packet = new DatagramPacket(buf, buf.length, address, 4445); socket.send(packet); buf = new byte[256]; packet = new DatagramPacket(buf, buf.length); socket.receive(packet); System.out.println(new String(packet.getData())); socket.close();

29 © Kozsik Tamás DatagramSocket socket = new DatagramSocket(); byte[] buf; buf = new byte[100]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); buf = (new String(packet.getData()) + new Date().toString()).getBytes(); InetAddress address = packet.getAddress(); int port = packet.getPort(); packet = new DatagramPacket(buf, buf.length, address, port); socket.send(packet); socket.close();

30 © Kozsik Tamás Elosztott rendszerek A program különböző komponensei különböző gépeken futnak. –Ebbe belefér a kliens/szerver architektúra is A komponensek kommunikációja: objektumok egymás metódusait hívják –A kommunikációs részleteket elrejtik a programozó elől Megvalósítás –Remote Method Invocation (Java-Java) –CORBA (Java-*)


Letölteni ppt "© Kozsik Tamás 2000-2006 Hálózati alkalmazások A Java egyik fő erőssége Célok –Kliens-szerver architektúra –Elosztott rendszer Lehetőségek –Appletek –Szervletek."

Hasonló előadás


Google Hirdetések