Gniazda komunikacji sieciowej w języku Java

Slides:



Advertisements
Podobne prezentacje
I część 1.
Advertisements

Usługi sieciowe Wykład 5 DHCP- debian
Wstęp do strumieni danych
C++ wykład 2 ( ) Klasy i obiekty.
C++ wykład 4 ( ) Przeciążanie operatorów.
Programowanie wizualne PW – LAB5 Wojciech Pieprzyca.
Mechanizmy pracy równoległej
Java dla studentów II roku Wydziału Fizyki PW Przemysław Duda, 2012
Mgr inż.Marcin Borkowski Podstawy Java Część II
Mgr inż.Marcin Borkowski Podstawy Java Krótkie wprowadzenie dla studentów Wyższej Szkoły Ekologii i Zarządzania
Programowanie obiektowe
Programowanie obiektowe
Sieci komputerowe Usługi sieciowe Piotr Górczyński 27/09/2002.
Przegląd protokołów rodziny TCP/IP (1)
Budowa Sewera i Klienta. Funkcja Connect (1) Funkcja Connect (2)
Rozszerzalność systemów rozproszonych
Autor Roman Jędras Prowadzący: dr inż. Antoni Izworski Przedmiot:
Projektowanie programu obsługującego gniazdka
Nguyen Hung Son Uniwersytet Warszawski
Programowanie obiektowe w Javie
Podstawy Programowania sieciowego w Javie
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
Bartosz Walter Inżynieria oprogramowania Lecture XXX JavaTM – część II Bartosz Walter
Inżynieria oprogramowania Lecture XXX JavaTM – część IV: IO
Programowanie sieciowe w Javie
C++ wykład 2 ( ) Klasy i obiekty.
Zaawansowane technologie Javy Wykład 5 (6 marca 2012) Programowanie sieciowe (1)
Java – technologie zaawansowane Wykład 5 (4 kwietnia 2011) Programowanie sieciowe – URL.
.NET Remoting Łukasz Zawadzki.
Czytanie, pisanie i rysowanie (czyli klasa I szkoły podstawowej)
Obsługa systemu wejścia-wyjścia
Język Java Wielowątkowość.
12. GNIAZDA BSD Biblioteka funkcji związanych z gniazdami jest interfejsem programisty do obsługi protokołów komunikacyjnych. Została utworzona dla Unixa.
Serializacja Serializacja pozwala zamienić obiekt na sekwencję bajtów, w sposób umożliwiający później wierne odtworzenie jego zawartości Inna nazwa to.
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Programowanie urządzeń mobilnych – wykład IV
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
W większości języków programowania biblioteki wejścia/wyjścia ukrywają szczegóły obsługi poszczególnych mediów pod abstrakcją strumienia (ang. stream).
Tworzenie aplikacji mobilnych
Sieci komputerowe.
Obsługa systemu wejścia-wyjścia
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Andrzej Repak Nr albumu
Java – coś na temat Klas Piotr Rosik
Inicjalizacja i sprzątanie
Seminarium problemowe
Systemy wejścia i wyjścia Michał Wrona. Co to jest system wejścia i wyjścia? Pobierania informacji ze źródeł danych, zdolnych przesyłać sekwencje bajtów,
Programowanie obiektowe Wykład 3 dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Dariusz Wardowski.
Komunikacja przez sieć z wykorzystaniem biblioteki WINSOCK
1 Strumienie Hierarchie klas strumieniowych, strumienie bajtowe - klasy InputStream i OutputStream i ich metody, klasa File, strumienie plikowe, strumienie.
Programowanie sieciowe w Javie
Aplikacje TCP i UDP. Łukasz Zieliński
1 Programowanie sieciowe Protokoły sieciowe, model warstwowy DOD, protokoły TCP i UDP, adresy IP, porty, gniazda, operacje na adresach - klasa InetAddress.
Kurs języka C++ – wykład 4 ( )
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Programowanie sieciowe w Javie Michał Kuciapski
Programowanie sieciowe w Javie Michał Kuciapski
Strumienie w języku Java Bartosz Walter InMoST Wielkopolska sieć współpracy w zakresie innowacyjnych metod wytwarzania oprogramowania Termin realizacji:
C++ mgr inż. Tomasz Turba Politechnika Opolska 2016.
Zaawansowane technologie Javy Wykład 4 (16 marca 2017)
Programowanie Obiektowe – Wykład 6
Zaawansowane technologie Javy Wykład 5 (26 marca 2017)
Wątki, programowanie współbieżne
Delegaty Delegat to obiekt „wiedzący”, jak wywołać metodę.
Programowanie Obiektowe – Wykład 2
Wydział Matematyki, Informatyki i Architektury Krajobrazu
Programowanie obiektowe – zastosowanie języka Java SE
Aplikacje i usługi internetowe
Tworzenie wątków w Javie
Zapis prezentacji:

Gniazda komunikacji sieciowej w języku Java Kamila Jabłońska Aleksandra Kosecka

(strumieniowe lub datagramowe) Gniazda w Javie GNIAZDO jest punktem końcowym dwukierunkowej komunikacji pomiędzy odległymi procesami. Gniazda (strumieniowe lub datagramowe) klienckie (ang. client socket) serwerowe (ang. server socket)

Pakiet java.net Klasy do obsługi komunikacji sieciowej:

klasa Socket dla gniazda komunikacji strumieniowej peer-to-peer Pakiet java.net definiuje kilka klas do obsługi gniazd: klasa Socket dla gniazda komunikacji strumieniowej peer-to-peer klasa ServerSocket dla gniazda nasłuchu po stronie serwera klasa java.net.DatagramSocket dla gniazda komunikacji pakietowej

Adres gniazda Adres gniazda składa się z: adresu komputera (hosta) numeru portu komunikacji sieciowej Adres komputera może być w postaci: nazwy tekstowej zgodnej z wymogami odpowiedniego serwisu nazewniczego adresu IP w postaci tekstowej lub numerycznej

Klasy do reprezentacji adresów

Metody klasy InetAddress static InetAddress getByAddress(byte[] addr) — tworzy obiekt na podstawie adresu IP w postaci binarnej, static InetAddress getByAddress(String host,byte[]addr) — tworzy obiekt na podstawie nazwy hosta i binarnego adresu IP (bez odwoływania się do serwisu nazw) static InetAddress getByName(String host) —tworzy obiekt na podstawie nazwy hosta, static InetAddress getLocalHost() — tworzy obiekt reprezentujący adres lokalny hosta.

Klasy SocketAdress i InetSocketAdress Klasa SocketAdress jest klasą abstrakcyjną, reprezentującą ogólny adres gniazda (nie związany z żadnym protokołem).

Klasy SocketAdress i InetSocketAdress Adres do obiektu klasy InetSocketAddress przypisywany jest tylko w jednym z konstruktorów: InetSocketAddress(InetAddress addr, int port) InetSocketAddress(int port) InetSocketAddress(String hostname, int port)

Klasy do reprezentacji gniazd

Konstruktory klasy Socket Socket() — utworzenie gniazda Socket(InetAddress address, int port) — utworzenie gniazda oraz próba nawiązania połączenia z serwerem Socket(InetAddress address, int port,InetAddress localAddr, int localPort) — utworzenie gniazda z dowiązaniem lokalnym oraz próba nawiązania połączenia z serwerem Socket(String host, int port) — utworzenie gniazda oraz próba nawiązania połączenia z serwerem na maszynie o podanej nazwie Socket(String host, int port, InetAddress localAddr, int localPort) — utworzenie gniazda z dowiązaniem lokalnym oraz próba nawiązania połączenia z serwerem na maszynie o podanej nazwie

Tworzenie gniazda klienta import java.net.*; import java.io.*; public class Gniazdo { public static void main(String args[]) try{ Socket socket = new Socket(„kamola.pl", 80);//konstruktor } catch(UnknownHostException e){ System.out.println("Nieznany host."); catch(IOException e){ System.out.println(e);

Metody klasy Socket void bind(SocketAddress bindpoint) — przyporządkowanie do lokalnego adresu (nadanie nazwy) void close() — zamknięcie gniazda void connect(SocketAddress endpoint) — próba nawiązania połączenia z serwerem void connect(SocketAddress endpoint, int timeout) — próba nawiązania połączenia z serwerem w określonym czasie

Nawiązanie połączenia Socket socket; InetSocketAddress address; try { socket = new Socket(); address = new InetSocketAddress("localhost", 6000); socket.connect(address); System.out.println("Polaczenie nawiazane"); } catch (Exception e) { System.err.println( e.getMessage() ); e.printStackTrace();

Klasa ServerSocket ServerSocket() — utworzenie gniazda bez nadanej nazwy (bez dowiązania) ServerSocket(int port) — utworzenie gniazda z przypisanym domyślnym adresem IP oraz podanym numerem portu ServerSocket(int port, int backlog) — utworzenie gniazda na podanym numerze portu z określeniem maksymalnej długości kolejki oczekujących żądań ServerSocket(int port, int backlog,InetAddress bindAddr) — utworzenie gniazda podobnie jak wyżej z dodatkowym podaniem adresu IP, jaki ma być przypisany do gniazda

Metody klasy ServerSocket Socket accept() — oczekiwanie na zgłoszenie klientów lub przyjęcie wcześniej zarejestrowanego zgłoszenia void bind(SocketAddress endpoint) — jawne przypisanie adresu (nadanie nazwy) void bind(SocketAddress endpoint, int backlog) jawne przypisanie nazwy i określenie maksymalnej długości kolejki oczekujących żądań void close() — zamknięcie z gniazda

Przykładowy program serwera import java.net.*; import java.io.*; public class Server { public static void main(String args[]) throws IOException { ServerSocket server_socket = null; InetSocketAddress address; Socket socket;

Przykładowy program serwera try { server_socket = new ServerSocket(); address = new InetSocketAddress(6000); server_socket.bind(address); System.out.println("Serwer nasluchuje..."); socket = server_socket.accept(); System.out.println("Zglosil sie klient"); System.err.println("Podlaczyl sie z adresu: " + socket.getInetAddress() ); } catch (Exception e) { System.err.println( e.getMessage() ); e.printStackTrace(); server_socket.close();

Przykładowy program klienta import java.net.*; import java.io.*; public class Client { public static void main(String args[]) Socket socket = null; try{ socket = new Socket("127.0.0.1", 6000); System.err.println("Nawiazano polaczenie!"); System.out.println(socket); } catch(UnknownHostException e){ System.out.println("Nieznany host"); catch(IOException e){ System.out.println(e);

Przykład wątku serwera współbieżnego public class ServiceThread extends java.lang.Thread { private Socket socket; private int number; public ServiceThread(Socket s, int n){ socket = s; number = n; } public void run() { ...

Współbieżna obsługa wielu połączeń ServerSocket server_socket; Socket socket; int number = 0; try { server_socket = new ServerSocket(6000); while (true) { socket = server_socket.accept(); System.out.println("Zglosil sie klient"); number++; new ServiceThread( socket, number ).start(); } catch (Exception e) { System.err.println( e.getMessage() ); e.printStackTrace();

Przekazywanie danych przez gniazdo strumieniowe W trybie połączeniowym gniazdo udostępnia strumień wejściowy oraz strumień wyjściowy, za pośrednictwem których można odpowiednio odbierać i wysyłać dane. Referencje do strumieni zwracają następujące metody obiektu klasy Socket: OutputStream getOutputStream() — referencja do strumienia wyjściowego, przez który wysyłane są dane, IntputStream getIntputStream() — referencja do strumienia wejściowego, przez który odbierane są dane.

Wysyłanie danych przez gniazdo strumieniowe try { DataOutputStream out; OutputStream out_sock; out_sock = socket.getOutputStream(); out = new DataOutputStream ( out_sock ); out.writeInt(87); } catch (IOException e) { System.err.println( e.getMessage()); e.printStackTrace();

Filtry Filtry są szczególnym rodzajem strumieni. Umożliwiają one łączenie strumieni i tworzenie złożonych potoków dzięki specyficznym konstruktorom: FilterInputStream(InputStream in) FilterOutputStream(OutputStream out)

Buforowanie strumieni Filtry BufferedInputStream i BufferedOutputStream umożliwiają buforowanie danych (strumienia bajtów). Wielkość bufora można ustalić w czasie tworzenia obiektu z pomocą konstruktora: BufferedInputStream(InputStream in, int size) Dane z bufora są przekazywane do strumienia wyjściowego w wyniku zapełnienia bufora lub wywołania metody flush() obiektu klasyFilterOutputStream (lub pochodnej).