JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html



Podobne dokumenty
Programowanie w języku Java

Java, bazy danych i SSL

Aplikacja wielowątkowa prosty komunikator

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

Platformy Programistyczne Zagadnienia sieciowe i wątki

Ćwiczenie 9 - Zaawansowane metody programowania w sieci komputerowej

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API

Aplikacja wielow tkowa prosty komunikator

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Przykłady interfejsu TCP i UDP w Javie

Komunikacja z użyciem gniazd aplikacje klient-serwer

Java programowanie sieciowe

Serwer współbieżny połączeniowy

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez:

Programowanie rozproszone w języku Java

Strumienie i serializacja

Programowanie współbieżne i rozproszone

Java programowanie w sieci. java.net RMI

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

RESTful Android. Na co zwrócić uwagę przy tworzeniu aplikacji klienckich REST na Androidzie

Przykłady ataków. Błąd dotyczy np. forów dyskusyjnych z możliwością umieszczania plików grafcznych. Pozwala to na wykonanie dowolnego żądania HTTP.

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Tworzenie i wykorzystanie usług

Adresy URL. Zaawansowane technologie Javy 2019

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Podstawowe typy serwerów

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Java niezbędnik programisty spotkanie nr 11. Importy statyczne, wejście/wyjście, wyrażenia regularne, serializacja

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

Bezpieczne uruchamianie apletów wg

Networking. Zaawansowane technologie Javy 2019

Wybrane działy Informatyki Stosowanej

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016

Programowanie sieciowe

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Programowanie współbieżne Laboratorium nr 11

Podejście obiektowe do budowy systemów rozproszonych

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Technologie internetowe laboratorium nr 5. Zabezpieczanie usług sieciowych z wykorzystaniem HTTP Basic Authentication oraz HTTPS

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

Zaawansowane aplikacje WWW - laboratorium

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer.

Inynieria oprogramowania Lecture XXX. Java TM cz IV: IO. Bartosz Walter

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Remote Method Invocation

Wywoływanie metod zdalnych

Remote Method Invocation 17 listopada 2010

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Wywoływanie metod zdalnych

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Aplikacje RMI

Wykład 4: Wejście/wyjście: strumienie Java

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

SOAP. Autor: Piotr Sobczak

Aplikacje RMI Lab4

Java a dost p do Internetu.

Podstawy i języki programowania

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Stanowe komponenty sesyjne

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Programowanie obiektowe

Programowanie obiektowe

Wykład 10: Wejście i Wyjście

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Przygotował: Jacek Sroka 1. Java SE. Strumienie

Java. Programowanie Obiektowe Mateusz Cicheński

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Języki i metody programowania Java. Wykład 2 (część 2)

Zadanie 2: transakcyjny protokół SKJ (2015)

Technologie internetowe laboratorium nr 4. Instalacja i uruchomienie usługi sieciowej w serwerze Tomcat/AXIS

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Multimedia JAVA. Historia

Podstawowe pojł cia. Czego sił nauczymy? Pojł cia hosta. Hosty Adresowanie Internetowe Porty Protokoóy

URL. Budowa URL (ang. Uniform Resource Locator): working#downloading

Programowanie obiektowe zastosowanie języka Java SE

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd.

Programowanie obiektowe

Programowanie aplikacji w architekturze Klient-Serwer - UDP

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

Dokumentacja do API Javy.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

JAVA I BAZY DANYCH. MATERIAŁY:

Systemy Rozproszone - Ćwiczenie 6

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA

Wprowadzenie do technologii Web Services: SOAP, WSDL i UDDI

Transkrypt:

JAVA I SIECI ZAGADNIENIA: URL, Interfejs gniazd, transmisja SSL, protokół JNLP. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 1

URL URL Unifed Resource Locator jest podstawową klasą identyfkującą zasoby w internecie: import java.net.*; import java.io.*; public class URLExample { public static void main(string[] args) throws Exception { URL url = new URL("http://www.google.pl/"); BufferedReader in = new BufferedReader(new InputStreamReader( url.openstream())); String s; while ((s = in.readline())!= null) System.out.println(s); in.close(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 2

URLConnection URLConnection zawiera metody umożliwiające nawiązanie połączenia z zasobem reprezentowanym przez URL. import java.net.*; import java.io.*; public class URLConnectionExample { public static void main(string[] args) throws Exception { URL url = new URL("http://www.google.pl/"); URLConnection con = url.openconnection(); BufferedReader in = new BufferedReader(new InputStreamReader( con.getinputstream())); String s; while ((s = in.readline())!= null) System.out.println(s); in.close(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 3

URLConnection URLConnection umożliwia także zapis do wskazanego zasobu przez obiekt URL. import java.io.*; import java.net.*; public class URLConnectionWriter { public static void main(string[] args) throws Exception { URL url = new URL(args[0]); URLConnection con = url.openconnection(); con.setdooutput(true); OutputStreamWriter out = new OutputStreamWriter( con.getoutputstream()); InputStreamReader(con.getInputStream())); for (int i = 1; i < args.length; i++) out.write(args[i]); out.close(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 4

URLConnection Zarówno w przypadku URL jak I URLConnection komunikacja odbywa się z wykorzystaniem odpowiedniego protokołu. Dokumentacja Javy gwarantuje standardowo obsługę następujących protokołów: http, https, ftp, ftp://login:haslo@serwer:port/katalog/podkatalog/plik fle, jar. Obsługa innych protokołów wymaga implementacji klasy URLStreamHandler. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 5

INTERFEJS GNIAZD Standardowa obsługa sieci w Javie opiera się o tzw. interfejs gniazd. Najważniejsze klasy, umożliwiające komunikację poprzez sieć to: Socket klasa reprezentująca gniazdo służącze do nawiązywania połączenia, wysyłania I odbierania danych, ServerSocket klasa reprezentująca gniazdo oczekujące na przychodzące żądania połączeń. Ponadto istnieją także gniazda SSLSocket I SSLServerSocket obsługujące komunikację szyfrowaną protokołem SSL/TLS. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 6

PROGRAM KLIENCKI import java.io.*; import java.net.socket; public class ClientExample { public static Socket sock; public static void main(string[] args) throws IOException{ // tworzymy gniazdo I nawiazujemy polaczenie z komputerem // identyfikowanym przez adres args[0] na porcie args[1] sock = new Socket(args[0], Integer.valueOf(args[1])); // pobieramy strumienie zwiazane z gniazdem OutputStream os = sock.getoutputstream(); InputStream is = sock.getinputstream(); // tworzymy Reader na standardowym wejsciu (klawiaturze) BufferedReader br = new BufferedReader(new InputStreamReader( System.in)); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 7

PROGRAM KLIENCKI // zmienne pomocnicze String sline; byte[] bres = new byte[100]; // glowna petla programu, pobieramy dane z klawiatury while((sline=br.readline())!=null){ // wysylamy je przez gniazdo os.write(sline.getbytes()); System.out.println("wyslalem: " + sline); // odbieramy odpowiedz z serwera to jest zle rozwiazanie // dobre rozwiązanie odbieranie danych w osobnym wątku is.read(bres); System.out.println("odebralem" + new String(bRes)); // zamykamy strumien i gniazdo br.close(); sock.close(); // koniec programu http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 8

PROGRAM KLIENCKI Osobny wątek do odbioru danych: Thread t = new Thread(new Runnable(){ public void run(){ byte[] bres = new byte[100]; InputStream is; int l; try { is = sock.getinputstream(); while(true){ l = is.read(bres); System.out.println("odebralem: " + new String(bRes,0,l)); catch (IOException e) { e.printstacktrace(); ); t.start(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 9

SERWER ECHO import java.io.*; import java.net.*; public class ServerExample { // gniazdo oczekujace na polaczenia private static ServerSocket ss; public static void main(string[] args) throws IOException{ // tworzymy gniazdo, ktore oczekuje na przychodzace polaczenia // na porcie przekazanym jako argument wywolania programu ss = new ServerSocket(Integer.valueOf(args[0])); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 10

SERWER ECHO // nieskonczona petla while(true){ // akceptujemy polaczenie, dostajemy gniazdo do komunikacji // z klientem Socket s = ss.accept(); // strumienie InputStream is = s.getinputstream(); OutputStream os = s.getoutputstream(); int b; // czytamy, piszemy na konsoli i odsylamy while((b=is.read())!=-1){ System.out.print((char)b); os.write(b); s.close(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 11

SERWER ECHO W serwerze nie ma problemu związanego z transmisją strumieniową ponieważ dane są przetwarzane bajt po bajcie, w związku z czym nie sytuacja, gdy dane dotrą w różnych pakietach nie spowoduje żadnych efektów ubocznych. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 12

SSL W JAVIE Protokół SSL umożliwia bezpieczną (szyfrowaną) transmisję danych poprzez niezabezpieczoną sieć. Dodatkowo SSL umożliwia autoryzację stron komunikacji. W tym celu wykorzystywany jest mechanizm certyfkatów. Za transmisję z użyciem protokołu SSL odpowiedzialne są klasy zgrupowane w pakiecie javax.net.ssl. Implementacja SSH jest dostępna poprzez zewnętrzne biblioteki. Jedną z nich jest jsch (http://www.jcraft.com/jsch/). http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 13

SERWER SSL import javax.net.ssl.*; import java.io.*; public class EchoServer { public static void main(string[] args) throws IOException { SSLServerSocketFactory factory = (SSLServerSocketFactory) SSLServerSocketFactory.getDefault(); SSLServerSocket ss = (SSLServerSocket) factory.createserversocket(9999); SSLSocket s = (SSLSocket) ss.accept(); BufferedReader br = new BufferedReader(new InputStreamReader( s.getinputstream())); String stmp = null; while ((stmp = br.readline())!= null) { System.out.println(sTmp); System.out.flush(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 14

KLIENT SSL import javax.net.ssl.*; import java.io.*; public class EchoClient { public static void main(string[] args) throws Exception { SSLSocketFactory factory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket s = (SSLSocket) factory.createsocket("localhost", 9999); BufferedReader br = new BufferedReader( new InputStreamReader(System.in)); OutputStreamWriter osw = new OutputStreamWriter( s.getoutputstream()); BufferedWriter bw = new BufferedWriter(osw); String stmp = null; while ((stmp = br.readline())!= null) { bw.write(stmp + '\n'); bw.flush(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 15

SSL W JAVIE Pierwsza czynność to wygenerowanie klucza: keytool -genkey -keystore mysrvkeystore -keyalg RSA Uruchomienie serwera: java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 EchoServer Uruchomienie klienta: java -Djavax.net.ssl.trustStore=mySrvKeystore -Djavax.net.ssl.trustStorePassword=123456 EchoClient Dodatkowe parametry wywołania pozwolą zobaczyć informacje związane z połączeniem SSL: -Djava.protocol.handler.pkgs=com.sun.net.ssl.internal.www.protocol -Djavax.net.debug=ssl Przykład ze strony: http://stilius.net/java/java_ssl.php. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 16

SSL W JAVIE Domyślnie tylko jedna strona komunikacji (serwer) musi potwierdzać swoją tożsamość. Aby wymusić autoryzację klienta należy użyć metod: setneedclientauth(true) lub setwantclientauth(true) wywołanych na rzecz obiektu SSLServerSocket. Jeśli chcemy aby żadna ze stron nie musiała potwierdzać swojej tożsamości musimy zmienić domyślne algorytmy kodowania. Najłatwiej zrobić to tworząc własne rozszerzenie klasy SSLSocketFactory. Listę obsługiwanych i domyślnych algorytmów uzyskamy za pomocą metod: getsuppotredciphersuites() oraz getdefaultciphersuites(). http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 17

JAVA WEB START Technologia Java Web Start jest stosowana do lokalnego uruchamiania programów w Javie umieszczonych w sieci. JWS: jest w pełni niezależna od używanych przeglądarek internetowych, umożliwia automatyczne pobranie właściwej wersji środowiska JRE, pobierane są tylko pliki, które zostały zmienione, obsługuje prawa dostępu do zasobów lokalnego komputera (dysk, sieć, itp.), do opisu zadania do uruchomienia wykorzystuje pliki jnlp (Java Network Launch Protocol). Więcej informacji: http://docs.oracle.com/javase/tutorial/deployment/webstart/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 18

PROTOKÓŁ JNLP <?xml version="1.0" encoding="utf-8"?> <jnlp spec="1.0+" codebase="http://www.serwer.w.sieci.pl/katalog" href="plik_jws.jnlp"> <information> <title>nazwa programu</title> <vendor>producent programu</vendor> <homepage href="http://www.strona.programu.pl"/> <description kind="short">krotki opis programu</description> <icon kind="splash" href="kat/splashscreen.gif"/> <icon href="kat/ikona.gif"/> <offline-allowed/> </information> <security> <all-permissions/> </security> http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 19

PROTOKÓŁ JNLP <resources> <j2se version="1.4+"/> <jar href="kat/archiwum1.jar"/> <jar href=" kat2/lib/biblioteka.jar"/> </resources> <application-desc main-class="pl.edu.uj.if.exampleclass"/> </jnlp> Plik jnlp umieszczamy na serwerze www. Często należy skonfgurować odpowiadający mu typ mime: application/x-java-jnlp-fle JNLP http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 20

DZIĘKUJĘ ZA UWAGĘ