Programowanie sieciowe



Podobne dokumenty
Przykłady interfejsu TCP i UDP w Javie

Networking. Zaawansowane technologie Javy 2019

Aplikacja wielowątkowa prosty komunikator

Programowanie współbieżne i rozproszone

Programowanie rozproszone w języku Java

Programowanie aplikacji w architekturze Klient-Serwer - UDP

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

Klient-Serwer Komunikacja przy pomocy gniazd

Aplikacja wielow tkowa prosty komunikator

Gniazda komunikacji sieciowej w środowisku Java

Komunikacja z użyciem gniazd aplikacje klient-serwer

Zadanie 2: transakcyjny protokół SKJ (2015)

Java programowanie sieciowe

Serwer współbieżny połączeniowy

JAVA I SIECI. MATERIAŁY:

Programowanie w języku Java

Gniazda BSD implementacja w C#

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

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

Java programowanie w sieci. java.net RMI

Platformy Programistyczne Zagadnienia sieciowe i wątki

Adresy URL. Zaawansowane technologie Javy 2019

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

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

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

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

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

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

Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP.

Podstawy i języki programowania

Java a dost p do Internetu.

Podstawowe typy serwerów

Wybrane działy Informatyki Stosowanej

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

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

Wywoływanie metod zdalnych

Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli.

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

Iteracyjny serwer TCP i aplikacja UDP

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Wywoływanie metod zdalnych

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

Komunikator internetowy w C#

Aplikacja Sieciowa wątki po stronie klienta

Kolejki FIFO (łącza nazwane)

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

TCP - receive buffer (queue), send buffer (queue)

Tworzenie aplikacji rozproszonej w Sun RPC

Wykład 2: Podstawy Języka

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

Programowanie sieciowe

Aplikacje RMI

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

Przesyłania danych przez protokół TCP/IP

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

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

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Programowanie aplikacji w architekturze Klient-Serwer - TCP

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski

Strumienie i serializacja

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

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

Systemy Rozproszone - Ćwiczenie 6

PROTOKOŁY WARSTWY TRANSPORTOWEJ

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

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

namespace HostedReceiver { public class Receiver: IConfigureThisEndpoint, AsA_Server {

Zdalna obsługa transcievera. H A M R A D I O D E L U X E R e m o t e S e r v e r C o n f i g u r a t i o n

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Metody Metody, parametry, zwracanie wartości

76.Struktura oprogramowania rozproszonego.

1. Model klient-serwer

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

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

Instytut Teleinformatyki

Wydział Informatyki, Elektroniki i Telekomunikacji Katedra Telekomunikacji

Podstawy programowania obiektowego

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

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

Programowanie równoległe i rozproszone. Monitory i zmienne warunku. Krzysztof Banaś Programowanie równoległe i rozproszone 1

Remote Method Invocation 17 listopada 2010

PHP: bloki kodu, tablice, obiekty i formularze

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

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

Podstawy obiektowości

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe

Podejście obiektowe do budowy systemów rozproszonych

Zadanie polega na stworzeniu bazy danych w pamięci zapewniającej efektywny dostęp do danych baza osób.

Unicast jeden nadawca i jeden odbiorca Broadcast jeden nadawca przesyła do wszystkich Multicast jeden nadawca i wielu (podzbiór wszystkich) odbiorców

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Wykład 8: klasy cz. 4

Komponenty sterowane komunikatami

Klasy w java.net. ContentHandlerFactory FileNameMap SocketImplFactory URLStreamHandlerFactory. Adres internetowy

Konfigurowanie konta pocztowego w programie Netscape (wersja 7.2)

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Dokumentacja do API Javy.

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

Transkrypt:

Programowanie sieciowe Wykład 5: Java sieciowa cd. mgr inŝ. Paweł Kośla mgr Marcin Raniszewski Łódź, 2009 1

Plan wykładu ServerSocket serwer TCP DatagramSocket i DatagramPacket UDP FTP 2

Serwer TCP Gniazdo serwerowe ma za zadanie nasłuchiwania na podanym porcie zgłoszeń klientów i następnie obsługiwanie połączenia z nim. Klasa ServerSocket MoŜliwość obsługi wielu klientów. Połączenie dwukierunkowe. Transmisja strumieniowa. Jeden proces moŝe słuchać na danym porcie w danym czasie. 3

Typologia serwerów Rodzaje serwerów: serwer jednowątkowy serwer pozornie wielowątkowy serwer wielowątkowy 4

Typologia serwerów Serwer jednowątkowy: Obsługa klienta Oczekiwanie Cechy: prostota budowy moŝliwość obsługi tylko jednego klienta naraz kolejny klient musi długo czekać na swoją kolej 5

Typologia serwerów Serwer pozornie wielowątkowy: elementy obsługi klienta 1 Sprawdzenie Dołączenie nowego klienta elementy obsługi klienta 2... elementy obsługi klienta n Cechy: zaawansowana budowa moŝliwość obsługi kilku klientów naraz kolejny klient musi czekać aŝ wykonana zostanie tura obsługi podłączonych 6 klientów

Typologia serwerów Serwer wielowątkowy: Wątek główny Utworzenie nowego procesu Wątek potomny Początek Wątek potomny Początek Oczekiwanie Obsługa klienta Obsługa klienta Cechy: same zalety moŝliwość obsługi kilku klientów naraz nowi klienci obsługiwani są natychmiastowo Koniec Koniec 7

Serwer TCP Podstawowy schemat serwera: open bind accept read write close close2 ServerSocket() open bind accept read write close close2 tworzy gniazdo serwera łączy stworzone gniazdo z lokalnym portem nasłuchuje i akceptuje połączenia od klientów pobiera dane ze strumienia otwartego połączenia z klientem wysyła dane zamyka połączenie zamyka serwer 8

Serwer TCP Realizacja serwera jednowątkowego: ServerSocket() accept open connect read write write read close close close2 serwer klient 9

Serwer TCP Realizacja serwera wielowątkowego: wątek open connect ServerSocket() accept read write close write/read close klient 2 serwer close2 wątek open connect read write write/read close close klient 1 10

Serwer TCP Jeszcze lepszy serwer wielowątkowy: ServerSocket() x10 createthread() open connect write/read close klient 1 serwer close2 wątek accept wątek accept wątek accept read write read write... read write close close close 11

Serwer TCP tworzenie Do tworzenia gniazd serwera TCP słuŝą konstruktory: public ServerSocket(int port) throws IOException public ServerSocket(int port, int backlog) throws IOException public ServerSocket(int port, int backlog, InetAddress bindaddr) throws IOException Najczęściej wykorzystuje się pierwszy konstruktor, podając numer portu na którym serwer ma nasłuchiwać: try { ServerSocket ss = new ServerSocket(80); catch (IOException e) { System.err.println(e); 12

Serwer TCP tworzenie Podczas tworzenia obiektu ServerSocket obiekt ten próbuje dowiązać się do wskazanego portu na lokalnym hoście (ang. binding). Jeśli port jest juŝ zajęty wyrzucony zostanie wyjątek: java.net.bindexception z klasy bazowej java.io.ioexception Tworzenie własnych serwerów na portach >1024. W systemach Unixowych programy korzystające z portów pomiędzy 1 a 1023 muszą mieć juŝ uprawnienia administratora. Port nr 0. Numer ten mówi Javie, aby skorzystała z pierwszego wolnego portu. Wybrany automatycznie numer portu moŝna odczytać za pomocą metody getlocalport(). try { ServerSocket ftpdata = new ServerSocket(0); int port = ftpdata.getlocalport(); catch (IOException e) { System.err.println(e); 13

Serwer TCP tworzenie Skaner portów lokalnych. Sprawdzenie na których portach są juŝ aktywne połączenia. Porównaj z "netstat -an" import java.net.*; import java.io.*; public class SkanerLoc { public static void main(string[] args) { int startport = 1; int stopport = 65535; for (int port = startport; port <= stopport; port++) { try { ServerSocket ss = new ServerSocket(port); ss.close(); catch (IOException ex) { System.out.println("Port " + port + " jest zajety."); 14

Serwer TCP Kolejka połączeń System operacyjny zapamiętuje połączenia przychodzące dla kaŝdego portu w kolejce typu FIFO aŝ do jej zapełnienia. Po zapełnieniu kolejki następne połączenia przychodzące będą odrzucane, chyba, Ŝe w kolejce zwolni się jakieś miejsce. Długość kolejki zaleŝy od systemu operacyjnego (5-50). Klient Klient Serwer Klient Klient 15

Serwer TCP tworzenie Rozmiar kolejki połączeń moŝe zostać zmieniony w zaleŝności od potrzeb. Wykorzystujemy do tego drugi konstruktor: public ServerSocket(int port, int backlog) throws IOException Przykład: try { ServerSocket httpd = new ServerSocket(80, 50); catch (IOException ex) { System.err.println(ex); KaŜdy system operacyjny ma określoną maksymalną długość kolejki. Jeśli więc zadeklarowana będzie kolejka dłuŝsza niŝ istniejące maksimum, to długość kolejki zawęŝona będzie do wartości maksymalnej. Po utworzeniu gniazda serwera długość kolejki nie moŝe być juŝ zmieniana. 16

Serwer TCP tworzenie Komputer moŝe uŝywać wielu interfejsów sieciowych. 10.0.0.0 10.0.0.0 192.168.0.2 192.168.0.0 10.0.0.1 192.168.0.0 Host 212.191.89.15 212.191.89.0 212.191.89.0 Poprzednio stworzone gniazda nasłuchują na wszystkich interfejsach. Do stworzenia gniazda serwera tylko dla wybranego interfejsu słuŝy: public ServerSocket(int port, int backlog, InetAddress bindaddr) throws IOException Przykład: try { InetAddress ia = InetAddress.getByName("192.168.0.2"); ServerSocket ss = new ServerSocket(80, 50, ia); catch (IOException e) { System.err.println(e); 17

Serwer TCP tworzenie Istnieje moŝliwość rozbicia tworzenia obiektu ServerSocket i przywiązania do portu. Wykorzystujemy wówczas konstruktor i metodę bind: public ServerSocket() throws IOException public void bind(socketaddress endpoint) throws IOException Odczyt informacji o gnieździe (tylko lokalne informacje): public InetAddress getinetaddress() public int getlocalport() 18

Serwer TCP nasłuchiwanie Po stworzeniu gniazda serwer czeka na zgłoszenia klientów. Odpowiedzialna za to jest metoda: public Socket accept() throws IOException Metoda nasłuchuje i akceptuje połączenia z klientem (czekającym w kolejce). Zwraca obiekt klasy Socket, reprezentujący połączenie klient-serwer. Jest to metoda blokująca. Blokuje wykonywanie dalszych instrukcji dopóki nie nastąpi połączenie. MoŜna zmienić opcje blokującej metody accept() public void setsotimeout(int timeout) throws SocketException timeout czas czekania na połączenie od klienta (0 domyślne, oznacza nieskończoność). Wówczas metoda accept moŝe zwrócić wyjątek SocketTimeoutException gdy czas nasłuchiwania minie. 19

Serwer TCP akceptowanie ServerSocket Klient accept() Socket read/write Serwer 20

Serwer TCP połączenie Połączenie z klientem realizowane jest za pomocą obiektu gniazda Socket Odczytywanie informacji o połączeniu jak w przypadku Klienta TCP Wysyłanie i odbieranie danych takie samo jak w Kliencie TCP 21

Serwer TCP zakończenie Metoda close() klasy Socket kończy konkretne połączenie klientserwer. Serwer dalej działa. Aby zakończyć działanie serwera naleŝy wykonać metodę close() na obiekcie klasy ServerSocket 22

Serwer TCP Fragment serwera: try { ServerSocket ss = new ServerSocket(2345); Socket s = ss.accept(); PrintWriter pw = new PrintWriter(s.getOutputStream()); pw.println("hello!"); pw.println("goodbye"); s.close(); ss.close(); catch (IOException e) { System.err.println(e); close() zamyka połączenie gniazda Socket s 23

Serwer TCP Fragment serwera wielokrotnie akceptującego połączenia: try { ServerSocket ss = new ServerSocket(2345); while (bstop==false) { Socket s = ss.accept(); PrintWriter pw = new PrintWriter(s.getOutputStream()); pw.println("hello!"); pw.println("goodbye"); s.close(); ss.close(); catch (IOException e) { System.err.println(e); 24

Serwer TCP - podsumowanie Opisane metody pozwalają obsługiwać klientów po kolei. Do obsługiwania wielu klientów jednocześnie wykorzystujemy wielowątkowość. Serwer startujemy na porcie, który później poznaje klient. Oczekujemy zgłoszeń klientów i następnie tworzymy komunikację między gniazdami Socket-Socket. 25

Komunikacja UDP Niepewna transmisja zagubione datagramy Brak kontroli przepływu datagramy w róŝnych kolejnościach Transmisja szybsza od TCP Wiadomość zawiera się w pojedynczym komunikacie UDP (dane nie większe niŝ ok. 60kB) Do obsługi komunikacji UDP słuŝą klasy: DatagramSocket gniazdo datagramowe DatagramPacket pakiet UDP (zamiast strumieni TCP) Host 1 Host 2 26

Komunikacja UDP DatagramSocket jest uŝywane do wysyłania i odbierania DatagramPacket DatagramPacket jest nakładką dla tablicy bajtów, z której dane będą wysyłane lub do której dane będą przyjmowane. Obiekt tej klasy przechowuje takŝe adres i port hosta, do którego dane będą wysłane. DatagramSocket jest połączeniem do portu, z którego nadawane i odbierane są przesyłki. Nie ma rozróŝnienia między klientem a serwerem DatagramSocket moŝe wysyłać do róŝnych odbiorców gdyŝ adres odbiorcy zapisany jest w pakiecie a nie w gnieździe. 27

UDP - DatagramPacket Nakładka dla tablicy bajtów. Zawiera takŝe port i adres hosta do którego dane będą wysłane (lub z którego dane zostały odebrane) Do tworzenia pakietu słuŝą konstruktory: public DatagramPacket(byte[] data, int length) public DatagramPacket(byte[] data, int length, InetAddress host, int port) Pozwalają przekazać obiektowi DatagramPacket tablicę bajtów oraz liczbę bajtów, która ma być wysłana. String s = "Wiadomosc do odbiorcy" byte[] b = s.getbytes(); DatagramPacket dp = new DatagramPacket(b, b.length); UŜywamy tylko gdy gniazdo zostało przypisane do jakiegoś odbiorcy metoda connect() (bardzo rzadko) 28

UDP - DatagramPacket Tradycyjnie powinno podać się adres odbiorcy i port na który wysyłamy. try { InetAddress host = InetAddress.getByName("192.168.0.2"); int port = 1111; String s = "Wiadomosc do odbiorcy2" byte[] b = s.getbytes(); DatagramPacket dp = new DatagramPacket(b, b.length, host, port); catch (UnknownHostException ex) { System.err.println(ex); Tablica bajtów jest przekazywana do konstruktora przez referencję. Dlatego jeśli jej zawartość zostanie zmieniona poza obiektem, to zmiany te dotyczyć będą równieŝ danych w DatagramPacket 29

UDP - DatagramPacket Obiekty są modyfikowalne, tzn. Ŝe moŝna zmienić ich parametry takie jak: dane, długość danych, port, adres. Robi się to za pomocą metod: public void setaddress(inetaddress host) public void setport(int port) public void setdata(byte buffer[]) public void setlength(int length) Do odczytu wspomnianych właściwości moŝna uŝyć metod: public InetAddress getaddress() public int getport() public byte[] getdata() public int getlength() Te drugie szczególnie przydają się przy odbieraniu pakietów. 30

UDP - DatagramSocket Mamy juŝ pakiet, teraz trzeba go wysłać. Do tworzenia datagramowych gniazd uŝywamy konstruktorów: public DatagramSocket() throws SocketException public DatagramSocket(int port) throws SocketException public DatagramSocket(int port, InetAddress laddr) throws SocketException Pierwszy uŝywany jest do gniazd datagramowych działających w trybie klienta (tylko do wysyłania, z pierwszego wolnego portu) Dwa następne mają dodatkowo moŝliwość nasłuchiwania i odbierania pakietów na wskazanym porcie i opcjonalnie tylko ze wskazanego interfejsu. Wysyłanie takim gniazdem następuje z podanego portu. Tak jak w TCP, tylko jeden proces moŝe nasłuchiwać na danym porcie (porty TCP i UDP są rozdzielne) 31

UDP - DatagramSocket UDP Port 445 zajety UDP Port 500 zajety UDP Port 1033 zajety UDP Port 1060 zajety UDP Port 1081 zajety UDP Port 1900 zajety Skaner portów lokalnych import java.net.*; import java.io.ioexception; public class UDPSkaner { public static void main(string[] args) { int startport = 1; int stopport = 65535; for (int port = startport; port <= stopport; port++) { try { DatagramSocket ds = new DatagramSocket(port); ds.close(); catch (IOException ex) { System.out.println("UDP Port " + port + " zajety"); PoniewaŜ UDP nie korzysta z połączeń, nie moŝna napisać skanera zdalnych portów UDP. 32

UDP wysyłanie danych Przekonwertować dane na tablicę bajtów. Przekazać do konstruktora DatagramPacket tablicę, razem z długością danych umieszczonych w tablicy, oraz InetAddress z numerem portu, pod który wysyłane będą dane. Wykonać metodę send() na obiekcie DatagramSocket try { InetAddress host = InetAddress.getByName("192.168.0.2"); int port = 1111; String s = "Wiadomosc do odbiorcy2" byte[] b = s.getbytes(); DatagramPacket dp = new DatagramPacket(b, b.length, host, port); DatagramSocket sender = new DatagramSocket(); sender.send(dp); catch (UnknownHostException ex) { System.err.println(ex); catch (IOException e) { System.out.println(e); 33

UDP odbieranie danych Utworzyć obiekt klasy DatagramSocket przekazując co najmniej numer portu, na którym będzie prowadzony nasłuch. Przekazać pusty obiekt DatagramPacket do metody receive() gniazda DatagramSocket. public void receive(datagrampacket dp) throws IOException Wątek wywołujący tą metodę zablokuje się, aŝ do chwili otrzymania pakietu. Po otrzymaniu pakietu obiekt DatagramPacket wypełniony zostanie danymi (takŝe hostem i portem nadawcy) try{ DatagramSocket ds = new DatagramSocket(1111); byte buffer[] = new byte[10]; DatagramPacket dp = new DatagramPacket(buffer,buffer.length); ds.receive(dp); byte[] data = dp.getdata(); String s = new String(data, 0, data.length); System.out.println(s); System.out.println(dp.getPort()); catch(ioexception e) { System.out.println(e); 34

UDP - gniazda Istnieje moŝliwość przywiązania gniazda UDP do hosta i portu zdalnego. Metoda klasy DatagramSocket: public void connect(inetaddress address, int port) Mimo sugerującej nazwy, nie następuje proces łączenia ze zdalnym hostem. Dzięki niej gniazdo takie, ma moŝliwość wysyłania i odbierania pakietów UDP do/z podanego zdalnego hosta i portu. UŜywamy wówczas konstruktora pakietu: public DatagramPacket(byte[] data, int length) Próba wykorzystania drugiego (przekazując inny host lub port od tego związanego funkcja connect() ) kończy się niepowodzeniem. try{ DatagramSocket ds = new DatagramSocket(1234); String s = "Komunikat" ; byte[] b = s.getbytes(); InetAddress host = InetAddress.getByName("192.168.66.5"); ds.connect(host,1111); DatagramPacket dp = new DatagramPacket(b, b.length); ds.send(dp); catch(ioexception e){ System.out.println(e); 35

UDP - rozgłaszanie Jeśli chcemy wysłać pakiet do wszystkich hostów w sieci, adresujemy obiekt DatagramPacket adresem rozgłoszeniowym. try{ DatagramSocket ds = new DatagramSocket(); String s = "Do wszystkich!!" ; byte[] b = s.getbytes(); InetAddress host = InetAddress.getByName("192.168.0.255"); DatagramPacket dp = new DatagramPacket(b, b.length, host, 1111); ds.send(dp); catch(ioexception e) { System.out.println(e); 36

UDP rozgłaszanie grupowe Do rozgłaszania grupowego korzystamy z klasy MulticastSocket, która jest pochodną DatagramSocket. Zdefiniowane są tu dodatkowe metody: public void joingroup(inetaddress mcastaddr) throws IOException public void leavegroup(inetaddress mcastaddr) throws IOException SłuŜą one do zapisywania i wypisywania z grupy. W parametrze przekazujemy obiekt InetAddress reprezentujący adres grupy (adres klasy D) Jeśli następnie wyślemy pakiet na ten adres dotrze on do wszystkich hostów zapisanych. String msg = "Hello"; InetAddress group = InetAddress.getByName("228.5.6.7"); MulticastSocket s = new MulticastSocket(6789); s.joingroup(group); DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(), group, 6789); s.send(hi); 37

UDP podsumowanie Przepis na komunikację UDP: 1. Utworzenie obiektu DatagramSocket bez podawania jakichkolwiek argumentów (podanie portu waŝne przy odbieraniu pakietów). 2. Opcjonalnie związanie ze zdalnym hostem metodą connect(). 3. Stworzenie jednego lub kilku obiektów DatagramPacket zawierają tablice bajtów, które naleŝy wysłać lub które zostały odebrane. 4. Jeśli nie została wywołana metoda connect(), to podczas tworzenia obiektów DatagramPacket naleŝy podać obiekt InetAddress oraz numer portu. 5. Określenie długości poszczególnych pakietów oraz przesłanie ich poprzez metodę send(pakietout) 6. Odebranie danych poprzez metodę receive(pakietin) 38

Protokół FTP import java.net.*; import java.io.*; public class FTP { public static void main(string[] args) { try{ Socket s = new Socket("ftp.kis.p.lodz.pl",21); klienta BufferedReader we = new BufferedReader(new wspierajacego protokol ftps. InputStreamReader(s.getInputStream()) ); Wersja tekstowa klienta scp: PrintWriter wy = new PrintWriter(s.getOutputStream()); wy.println("user anonymouse"); wy.println("pass a@a.pl"); ty/ wy.println("pwd"); wy.println("quit"); Wersja okienkowa klienta scp: http://winscp.vse.cz/eng/ wy.flush(); String line; Wersja okienkowa klienta ftps: while( (line=we.readline())!= null){ System.out.println(line); s.close(); catch(ioexception e) { System.out.println(e); 220- Witaj - UNKNOWN@ksl.tvsat364.lodz.pl Aby pobrac dane z konta uzyj sftp, scp badz http://www.chiark.greenend.org.uk/~sgtatham/put http://www.smartftp.com/ 220 212.191.89.2 FTP server ready 550 SSL/TLS required on the control channel 550 SSL/TLS required on the control channel 550 SSL/TLS required on the control channel 221 Goodbye. 39