Programowanie aplikacji w architekturze Klient-Serwer - UDP

Wielkość: px
Rozpocząć pokaz od strony:

Download "Programowanie aplikacji w architekturze Klient-Serwer - UDP"

Transkrypt

1 Katedra Inżynierii Komputerowej Koszalin 2002 Programowanie dla sieci Wykłady i ćwiczenia Dariusz Rataj Część 2 Programowanie aplikacji w architekturze Klient-Serwer - UDP Kontakt rataj@man.koszalin.pl Materiały dostępne pod adresem:

2 Spis treści Spis treści Komunikacja datagramowa - UDP Klasy języka Java obsługujące połączenia datagramowe Klasa DatagramPacket Datagramy wysyłane - konstruktory Datagramy odbierane - konstruktory Metody pomocnicze klasy DatagramPacket Klasa DatagramSocket Gniazda wysyłające dane Gniazda odbierające dane Przykłady realizacji usług opartych na UDP Komunikacja jednokierunkowa Proste usługi (przykład realizacji usługi daytime) Przesyłanie większych bloków danych (przykład usługi copyfile) Aplety i komunikacja sieciowa Podsumowanie UDP-TCP Dodatek. Ćwiczenia do samodzielnego wykonania Komunikacja datagramowa - UDP W odróżnieniu od rozwiązań opartych na połączeniach TCP komunikacja datagramowa charakteryzuje się dużą zawodnością. Powodem tego jest, przede wszystkim, brak połączenia między klientem a serwerem a także brak potwierdzenia otrzymania danych realizowanego na poziomie protokołu UDP (w warstwie 4 modelu OSI). Ważną cechą komunikacji opartej na UDP jest brak gniazda serwera. UDP (datagram) Aplikacja wysyłane dane nagłowek UDP wysyłane dane IP nagłowek IP nagłowek UDP wysyłane dane Ethernet nagłowek Ethernet nagłowek IP nagłowek UDP wysyłane dane końcówka Ethernet Rys. 1. Opakowywanie datagramu w komunikacji przez UDP Gniazda datagramowe mogą jedynie wysyłać i odbierać datagramy. Datagram jest pakietem UDP i wiąże się bezpośrednio z fizycznym opakowaniem danych w warstwie transportowej (Rys. 1)

3 Nagłówek pakietu UDP (datagramu) zawiera informacje o porcie docelowym, porcie źródłowym i długości datagramu wraz z nagłówkiem. Wielkość bloku danych datagramu jest ograniczona do wielkości bajtów co jest spowodowane maksymalną wielkością pakietu IP. W niektórych systemach wielkości te mogą się różnić i w praktyce stosuje się dużo mniejsze bloki danych umieszczane w datagramach. Zalecane jest stosowanie datagramów z blokiem danych nie większym niż 8kB (8192 bajty). Takie ograniczenie ma dostosować wielkość datagramu do różnych rozwiązań w warstwie IP i w warstwie fizycznej a tym samym zmniejszyć zawodność komunikacji. 2. Klasy języka Java obsługujące połączenia datagramowe Do realizacji połączeń datagramowych w języku Java wykorzystywane są dwie klasy: DatagramPacket i DatagramSocket. Klasa DatagramPacket definiuje wysyłany lub odbierany datagram, klasa DatagramSocket wysyła lub odbiera datagramy. Obydwie klasy są wykorzystywane zarówno po stronie serwera jak i klienta Klasa DatagramPacket Obiekt klasy DatagramPacket reprezentuje pakiet UDP inaczej nazywany datagramem. Klasa posiada sześć konstruktorów. Poniżej przedstawione zostały cztery konstruktory stosowane najczęściej w praktyce z czego dwa pierwsze używane są do tworzenia datagramów do wysłania, dwa kolejne do tworzenia obiektów dla datagramów odbieranych Datagramy wysyłane - konstruktory Wysyłany datagram zawiera dane: bufor zawierający dane wysyłane, długość bloku danych wysyłanych, adres docelowy oraz port docelowy. public DatagramPacket(byte[] buf, int length, InetAddress address, int port) konstruktor paczki datagramowej z parametrami: buf - tablica wartości typu byte (bufor wysyłanych danych), length - ilość (długość) bajtów wysyłanych - typu int, address - adres docelowy - obiekt typu InetAddress, port - port docelowy - wartość typu int. Drugi z przedstawionych kostruktorów daje możliwość wysłania wybranego fragmentu bufora i posiada dodatkowy parametr offset (przesunięcie) określający początek bloku danych odczytywanych z bufora. public DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port) konstruktor paczki datagramowej z parametrami: buf - tablica wartości typu byte (bufor wysyłanych danych), offset - początek (przesunięcie od początku bufora) bloku danych wysyłanych - typu int, length - ilość (długość) bajtów wysyłanych - typu int, address - adres docelowy - obiekt typu InetAddress, port - port docelowy - wartość typu int. Przykładowy fragment poprawnie utworzonego datagramu może wyglądać następująco: byte buf[] = new byte[100]; // bufor wielkości 100 bajtów... // umieszczenie danych w buforze DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("kos.man.koszalin.pl"), 5501 ); - 3 -

4 Datagramy odbierane - konstruktory Kolejne dwa konstruktory klasy DatagramPacket stosowane są dla datagramów przychodzących. W tym zastosowaniu nie ma potrzeby definiowania adresu i portu (z oczywistych powodów). Definiowany jest jedynie bufor i długość bloku danych danych: public DatagramPacket(byte[] buf, int length) konstruktor datagramu z parametrami: buf - tablica wartości typu byte (bufor przychodzących danych), length - maksymalna ilość (długość) bajtów odbieranych - typu int. Kolejny konstruktor daje możliwość zapisu danych przychodzących począwszy od wybranego miejsca w buforze. public DatagramPacket(byte[] buf, int offset, int length) konstruktor datagramu z parametrami: buf - tablica wartości typu byte (bufor przychodzących danych), offset - początek (przesunięcie od początku bufora) bloku danych przychodzących - typu int, length - maksymalna ilość (długość) bajtów odbieranych - typu int. Przykładowy fragment poprawnie utworzonego datagramu dla danych przychodzących może wyglądać następująco: byte buf[] = new byte[100]; // bufor wielkości 100 bajtów // obiekt gotowy do przyjęcia 100 bajtów danych DatagramPacket packet = new DatagramPacket(buf, buf.length); Metody pomocnicze klasy DatagramPacket Oprócz konstruktorów tworzących obiekt paczki datagramowej klasa DatagramPacket posiada szereg metod pozwalających na operowanie informacjami zapisanym w datagramie. Można tu wyróżnić dwie grupy: metody ustawiające informacje - setx oraz metody pobierające informacje z datagramu- getx. Metody ustawiające informacje: void setaddress(inetaddress addr) - ustawienie adresu docelowego, void setdata(byte[] buf) - ustawienie bufora, void setdata(byte[] buf, int offset, int length) - ustawienie bufora, długości bufora i przesunięcia w buforze, void setlength(int length) - ustawienie długości bloku danych, void setport(int port) - ustawienie portu docelowego. Metody pobierające informacje: InetAddress getaddress() - pobranie adresu docelowego, byte[] getdata() - pobranie danych z datagramu, int getlength() - pobranie długości bloku danych, int getoffset() - pobranie przesunięcia danych w buforze, int getport() - pobranie portu docelowego

5 2.2. Klasa DatagramSocket Klasa DatagramSocket służy do tworzenia obiektów gniazd datagramowych, które mogą zarówno wysyłać jak i odbierać dane (datagramy - wcześniej utworzone obiekty DatagramPacket). Podobnie jak w przypadku klasy DatagramPacket klasa DatagramSocket posiada oddzielne konstruktory dla strony odbierającej jak i wysyłającej datagramy Gniazda wysyłające dane Dla gniazd wysyłających dane stosowany jest jeden konstruktor klasy DatagramSocket - konstruktor bezparametrowy. Gniazda wysyłające dane mogą przejść w tryb odbierania danych. Nie ma wtedy konieczności tworzenia nowego obiektu gniazda - datagramy będą odbierane domyślnie na porcie na którym były poprzednio wysyłane. Konstruktor bezparametrowy stosowany jest najczęściej po stronie aplikacji klienta. public DatagramSocket() konstruktor bezparametrowy. Adres i port docelowy zdefiniowane są w obiekcie DatagramPacket wysyłanym przez gniazdo. Po utworzeniu gniazda można wysyłać datagramy metodą send: byte buf[] = new byte[100]; // bufor wielkości 100 bajtów... // umieszczenie danych w buforze DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("kos.man.koszalin.pl"), 13 ); DatagramSocket socket= new DatagramSocket(); // obiekt gniazda socket.send(packet); // wysłanie paczki (datagramu) Gniazda odbierające dane Konstruktory stosowany jest po stronie aplikacji serwera muszą być przywiązane do numeru portu: public DatagramSocket(int port) konstruktor gniazda z parametrem: port - numer portu wiązanego z gniazdem - typu int. Gniazdo zostaje wiązane z portem numer port UDP. Drugi z konstruktorów dla gniazd odbierających dane ma możliwość związania z wybranym adresem przypisanym do hosta. Stosowany dla hostów posiadających więcej niż jeden adres IP. public DatagramSocket(int port, InetAddress addr) konstruktor gniazda z parametrami: port - numer portu wiązanego z gniazdem - typu int, addr - obiekt klasy InetAddress opisujący wiązany z gniazdem adres IP. Gniazdo zostaje wiązane z portem numer port UDP i adresem IP opisywanym przez addr. Po utworzeniu gniazda można odbierać datagramy metodą receive: - 5 -

6 byte buf[] = new byte[100]; // bufor wielkości 100 bajtów DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive( packet ); // oczekiwanie na datagram Metoda receive oczekuje na przyjście datagramu podobnie jak metoda accept klasy ServerSocket (komunikacja TCP) i także jest jest to metoda blokująca. W sytuacji gdy gniazdo nie powinno oczekiwać w nieskończoność na dane przychodzące można ustawić czas oczekiwania gniazda metodą setsotimeout. Kod utworzenia gniazda datagramowego wymaga obsługi odpowiednich wyjątków. Konstruktory klasy mogą zwrócić wyjątki: SocketException - gdy wystąpi błąd otwarcia gniazda; SecurityException - wyjątek ochrony (wyrzucany przez obiekt SecurityManager, np. w przeglądarce internetowej). 3. Przykłady realizacji usług opartych na UDP W dalszej części przedstawione są przykłady rozwiązań komunikacji opartej na UDP. Największym problemem w tego typu komunikacji jest zapewnienie minimum niezawodności wymiany informacji i jest to zadanie niezwykle złożone. Przedstawione tu przykłady nie zapewniają pełnej niezawodności, są jedynie prezentacją kilku rozwiązań Komunikacja jednokierunkowa W najprostrzych rozwiązaniach komunikacji opartej na UDP realizuje się komunikację jednokierunkową gdzie jedna strona (klient) wysyła dane, druga (serwer) odbiera dane (Rys. 2). Warte podkreślenia jest to że strona wysyłająca w żaden sposób nie jest w stanie stwierdzić czy wysłane dane dotarły do celu. Takie rozwiązanie można zastosować gdy dotarcie wszystkich danych do adresata nie jest konieczne (dźwięk, obraz itp.). Zaletą tak prostego systemu komunikacji jest szybkość transferu danych. host klienta host serwera SendDatagram packet ReceiveDatagram packet socket send() Datagramy od klienta do serwera (w przykładzie klient wysyła 10 datagramów) socket receive() Rys. 2. Jednokierunkowe przesłanie datagramów (bez potwierdzenia!) - 6 -

7 Przedstawione przykłady - aplikacje SendDatagram, ReceiveDatagram - tworzą prosty system komunikacji jednokierunkowej. Aplikacja SendDatagram wysyła 10 datagramów zawierających datę i godzinę w odstępach jedno-sekundowych. Aplikacja ReceiveDatagram odbiera wszystkie datagramy przychodzące do gniazda i drukuje informacje na konsoli. Przykład 1. SendDatagram.java import java.net.*; import java.util.*; public class SendDatagram { public static void main(string args[]) { int port = 5500; for (int i =0; i<10; i++) { // petla wysyla 10 datagramow try { InetAddress servaddr = InetAddress.getByName(" "); String data = i + ". Data i godzina wyslania: " + new Date(); byte buf[] = data.getbytes(); DatagramSocket socket= new DatagramSocket(); DatagramPacket packet = new DatagramPacket(buf, buf.length, servaddr, port ); socket.send(packet); System.out.println("Wyslano datagram"); /* Zatrzymanie na 1s */ try { Thread.sleep(1000); catch (InterruptedException ex) {System.err.println("Blad sleep()!"); ; // try catch(exception ex) { System.err.println(ex); // for // main // SendDatagram Przykład 2. ReceiveDatagram.java import java.net.*; public class ReceiveDatagram { public static void main(string args[]){ int port = 5500; System.out.println("Aplikacja ReceiveDatagram czeka na datagramy: port " + port); try{ DatagramSocket socket = new DatagramSocket(port); while(true) { byte[] buf = new byte[100]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive( packet ); System.out.println("Dane odebrane [" + new String(packet.getData()).trim() + "]" ); // while // try catch(exception e) { System.err.println(e); - 7 -

8 // main // ReceiveDatagram 3.2. Proste usługi (przykład realizacji usługi daytime) Większość usług opartych na UDP, realizowanych w praktyce, są to proste usługi działające na zasadzie zapytanie-odpowiedź. Wśród standardowych usług udostępnianych na serwerach sieciowych można wyróżnić: echo (port 7), discard (port 9), daytime (port 13), time (port 37), name (port 42),... itd. Wszystkie te usługi wysyłają datagram informujący serwer usługi o żądaniu realizacji usługi. W niektórych usługach wymagane jest skonstruowanie odpowiedniego zapytania przez klienta (np. name), w innych klient wysyła datagram pusty (daytime, time - dane zawarte w datagramie są bez znaczenia). Usługa diagnostyczna echo przyjmuje dowolne dane i odsyła je w takiej postaci w jakiej przyszły. host klienta host serwera DatagramClient packet DatagramServer packet socket send() receive() 1. Datagram od klienta do serwera - datagram pusty 2. odpowiedź serwera np. "Wed Sep 11 18:53: " socket receive() send() Rys. 3. Realizacja prostych usług zapytanie-opdpowiedź Przykładowa aplikacja DatagramClient realizuje funkcję klienta usługi daytime wysyłając datagram pusty. Zmiana portu na 9 lub 37 zmieni funkcję aplikacji odpowiednio na realizację usług discard i time. Prosta modyfikacja zawartości danych w wysyłanym datagramie pozwoliłaby na realizację usług echo, name. Przykład 3. DatagramClient.java import java.net.*; import java.io.*; public class DatagramClient { public static void main(string args[]) { try{ InetAddress servaddr = InetAddress.getByName("localhost"); /* wys³anie pustego datagramu */ byte buf[] = new byte[1]; DatagramSocket socket= new DatagramSocket(); socket.send(new DatagramPacket(buf, buf.length, servaddr, 13 )); System.out.println("Wyslano datagram: [" + new String(buf).trim() + "]"); /* odbior odpowiedzi */ - 8 -

9 buf = new byte[100]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.setsotimeout(2000); socket.receive(packet); System.out.println("Odebrano datagram: [" + new String(buf).trim() + "]"); // try catch(unknownhostexception e) { System.err.println("Jakis blad - UnknownHostEx"); catch(socketexception e) { System.err.println("Jakis blad - SocketEx"); catch(ioexception e) { System.err.println("Jakis blad - IOEx"); // main // DatagramClient Przykład 4 przedstawia implementację serwera usługi daytime. Realizacja usługi zrealizowana jest w pętli nieskończonej while: while(true){ /* Odebranie datagramu */... socket.receive( packet );... /* Wyslanie datagramu z data i godzina */ socket.send( new DatagramPacket( buf, buf.length, packet.getaddress(), packet.getport() ) );... Według podobnego schematu działają serwery innych, wcześniej wymienionych usług i dostosowanie serwera do obsługi innych usług (podobnie jak w przypadku klienta) nie stanowi większego problemu. Przykład 4. DatagramServer.java import java.net.*; import java.util.*; import java.io.*; public class DatagramServer{ public static void main(string args[]){ try{ DatagramSocket socket = new DatagramSocket(13); while(true){ /* Odebranie pustego datagramu */ byte[] buf = new byte[100]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive( packet ); System.out.println("Odebrano datagram: [" + new String(buf).trim() + "]"); /* Wyslanie datagramu z data i godzina */ buf = new Date().toString().getBytes(); socket.send( new DatagramPacket( buf, buf.length, packet.getaddress(), packet.getport() ) ); System.out.println("Odeslano datagram: [" + new String(buf).trim() + "]"); // while // try catch(unknownhostexception e) { System.err.println("Jakis blad - UnknownHostEx"); catch(socketexception e) { System.err.println("Jakis blad - SocketEx"); catch(ioexception e) { System.err.println("Jakis blad - IOEx"); // main - 9 -

10 // DatagramServer 3.3. Przesyłanie większych bloków danych (przykład usługi copyfile) Przykład aplikacji CopyFileServer realizuje przesłanie zawartości pliku do klienta z podziałem pliku na kawałki tzw. chunks (ang.: chunk - kawałek) o maksymalnej wielkości 8192 bajty (zalecany rozmiar bloku danych w datagramie). Podobne rozwiązanie było stosowane w kilku usługach sieciowych lecz zostało wyparte protokołami opartymi na TCP (np. usługa TFTP). W obecnych czasach można spotkać transfer pliku podzielonego na kawałki w różnych specyficznych sieciach komunikacyjnych m.in. w systemach typu P2P (peer to peer). Poniżej prezentowane rozwiązanie trudno nazwać rozwiązaniem niezawodnym z uwagi na brak kilku istotnych zabezpieczeń. Między innymi pominięta została kontrola źródła przychodzących datagramów, kontrola kolejności przychodzących kawałków. Aplikacja serwera oczekująca na porcie 5501 wykonuje działania: odbiera pusty datagram - zgłoszenie klienta, wysyła datagram zawierający prosty komunikat "OK" - potwierdzenie dla klienta, oblicza ilość kawałków na które zostanie podzielony plik, odczytuje w pętli for kolejne kawałki z pliku, wysyła odczytany kawałek w postaci datagramu, odczytuje potwierdzenie od klienta - datagram pusty, wysyła kolejne kawałki aż do wyczerpania zawartości pliku i odbierając potwierdzenia od klienta po każdym kawałku. Przykład 5. CopyFileServer.java import java.net.*; import java.io.*; public class CopyFileServer { int port = 5501; FileInputStream file; int filesize; String filename; private boolean openfile(string filename) { try { file = new FileInputStream(filename); filesize = file.available(); // wielkosc pliku catch (FileNotFoundException ex) { System.out.println("Nie znaleziono pliku!"); return false; catch (IOException ex) { System.out.println("Blad odczytu!"); return false; return true; private void closefile() { try { if (file!= null) file.close(); catch (IOException ex) { System.out.println("Blad przy zamykaniu pliku!"); public CopyFileServer(String localfile) {

11 System.out.println("Startuje serwer CopyFile na porcie " + port); filename = localfile; // nazwa pliku try{ DatagramSocket socket = new DatagramSocket(port); // gniazdo serwera na porcie while (true) { /* odczyt zgloszenia - datagram pusty */ byte[] buf = new byte[100]; // bufor do odczytu datagramu DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive( packet ); // oczekiwanie na datagram System.out.println("Zgloszenie od klienta..."); /* wyslanie potwierdzenia "OK" */ if (openfile(filename)) buf = "OK".getBytes(); else System.exit(0); socket.send(new DatagramPacket(buf, buf.length, packet.getaddress(), packet.getport())); /* wyslanie kolejnych kawalkow */ int chunks = (int)(filesize/8192); for (int i =0 ; i <= chunks; i++) { byte[] buffer; if (filesize-i*8192 >= 8192) buffer = new byte[8192]; else buffer = new byte[filesize-i*8192]; int count = file.read(buffer); System.out.println("Wysylam kawalek: " + count + " " + (i+1)+ "/" + (chunks+1)); socket.send( new DatagramPacket( buffer, buffer.length, packet.getaddress(), packet.getport())); socket.receive( packet ); // odbior potwierdzenia - datagram pusty if (file!= null) closefile(); // zamkniecie pliku // while // try catch(unknownhostexception e) { System.err.println("Jakis blad - UnknownHostEx"); catch(socketexception e) { System.err.println("Jakis blad - SocketEx"); catch(ioexception e) { System.err.println("Jakis blad - IOEx"); public static void main(string args[]){ if (args.length > 0 ) { new CopyFileServer(args[0]); else { System.out.println("Poprawne uruchomienie serwera:"); System.out.println("java CopyFileServer <nazwa pliku>"); // main // DatagramServer Aplikacja klienta wykonuje działania: wysyła pusty datagram - zgłoszenie do serwera, odbiera datagram zawierający prosty komunikat "OK" - potwierdzenie od serwera, oblicza ilość kawałków na które zostanie podzielony plik, odbiera w pętli for kolejne datagramy przychodzące od serwera, wysyła potwierdzenie do serwera - datagram pusty, odbiera kolejne kawałki aż do wyczerpania zawartości pliku za każdym razem potwierdzając datagramem pustym. Przykład 5. CopyFileClient.java import java.net.*;

12 import java.io.*; public class CopyFileClient { int port = 5501; FileOutputStream file; int filesize; String filename; private boolean openfile(string filename) { try { file = new FileOutputStream(filename); catch (FileNotFoundException ex) { System.out.println("Nieznaleziono pliku!"); return false; catch (IOException ex) { System.out.println("Blad odczytu!"); return false; return true; private void closefile() { try { if (file!= null) file.close(); catch (IOException ex) { System.out.println("Blad przy zamykaniu pliku!"); public CopyFileClient(String localfile, int size) { filename = localfile; filesize = size; // parametry pliku: nazwa i rozmiar try{ /* zgloszenie uslugi - datagram pusty */ InetAddress servaddr = InetAddress.getByName("localhost"); byte buf[] = " ".getbytes(); DatagramSocket socket= new DatagramSocket(); socket.setsotimeout(3000); // timeout dla gniazda 3 sekundy socket.send(new DatagramPacket(buf, buf.length, servaddr, port )); /* odbior potwierdzenia przyjecia zgloszenia */ buf = new byte[100]; DatagramPacket packet = new DatagramPacket(buf, buf.length); socket.receive(packet); String answer = new String(packet.getData()).trim(); System.out.println("Informacja od serwera: " + answer); if (!answer.equals("ok")) { System.out.println("Blad po stronie serwera! Koniec"); System.exit(0); /* otwarcie pliku do zapisu */ openfile(filename); int chunks = (int)(filesize/8192); // ilosc wysylanych kawalkow for (int i = 0 ; i <= chunks; i++) { byte[] buffer; // bufor datagramu - maksymalny rozmiar kawalka 8192 if (filesize < 8192) buffer = new byte[filesize-i*8192]; else if (filesize-i*8192 >= 8192) buffer = new byte[8192]; else buffer = new byte[filesize-i*8192]; packet = new DatagramPacket(buffer, buffer.length);

13 socket.receive(packet); // odbior kawalka file.write(packet.getdata()); // zapis do pliku socket.send(new DatagramPacket(new byte[1], 1, servaddr, 5501 )); // wyslanie potwierdzenia // for // try catch(unknownhostexception e) { System.err.println("Jakis blad - UnknownHostEx"); catch(socketexception e) { System.err.println("Jakis blad - SocketEx"); catch(ioexception e) { System.err.println("Jakis blad - IOEx"); finally { if (file!= null) closefile(); // zamkniecie pliku // konstruktor /* program glowny main*/ public static void main(string args[]){ new CopyFileClient("joke.jpg", ); /* program g³ówny koniec main*/ // CopyFileClient Zaprezentowane rozwiązanie jest jedynie demonstracją możliwości protokołu UDP i zastosowanie go w praktyce może okazać się niewystarczające. Do kopiowania większych bloków danych stosuje się częściej rozwiązania pozwalające na przesyłanie kawałków w kolejności losowej (w UDP nie ma gwarancji zachowania kolejności przychodzących datagramów) lecz takie rozwiązanie wymaga zastosowania systemu oznaczeń kawałków (numerowania) i systemu buforowania danych

14 3. Aplety i komunikacja sieciowa Aplet to specyficzny rodzaj aplikacji javy, której podstawową cechą jest działanie pod kontrolą maszyny wirtualnej java wbudowanej w inną aplikację. Taką aplikacją posiadającą własną, wbudowaną maszynę wirtualną może być np. popularna przeglądarka internetowa Netscape, MS Internet Explorer, przeglądarka appletviewer dołączana do JDK Sun itd. Ze względu na inny rodzaj środowiska pracy aplet powinien spełnić określone warunki bezpieczeństwa. W środowisku maszyny wirtualnej wbudowanej w przeglądarkę pracuje obiekt SecurityManager kontrolujący prawa dostępu do zasobów systemu. W zastosowaniach komunikacji sieciowej SM kontroluje prawa do połączeń sieciowych. Standardowo dopuszczane są jedynie próby połączeń z hostem z którego pobrany został aplet. Rys. 4. Połączenia sieciowe apletu W sytuacji gdy aplet jest uruchamiany lokalnie z lokalnego pliku html (bez serwera www) obiekt SecurityManager nie dopuści do żadnych połączeń, również do połączeń lokalnych. Większość omawianych wcześniej klas (konstruktory tych klas) wyrzucają wyjątek SecurityException w przypadku niedozwolonej próby połączenia. Jest to wynikiem działania obiektu SecurityManager. Aplikacje - aplety uruchamiane pod kontrolą przeglądarki powinny obsługiwać ten wyjątek przy tworzeniu obiektów gniazd

15 5. Podsumowanie UDP-TCP W tabeli 1 zestawione zostały najważniejsze cechy komunikacji opartej na TCP i UDP. Warto podkreślić że obydwa protokoły posiadają wady i zalety. Zadaniem programisty jest określenie potrzeb zależnych od zastosowań i wybór odpowiedniego rozwiązania. Tabela 1. Najważniejsze cechy połączeń opartych na TCP i UDP Gniazda TCP Gniazda UDP utrzymują połączenie potwierdzenie realizowane na poziomie protokołu TCP bez udziału programisty dane przychodzące w kolejności wysłania możliwa komunikacja aktywnego gniazda tylko z jednym klientem (lub serwerem) mniejsza szybkość komunikacji spowodowana koniecznością wymiany dodatkowych informacji i działań (potwierdzeń, zwalnianie szybkości, buforowanie itp.) brak połączenia potwierdzenia realizowane przez programistę na poziomie aplikacji dane (datagramy) mogą docierać do adresata w innej kolejności niż kolejność wysłania możliwe odbieranie datagramów od wielu klientów na pojedynczym gnieździe większa szybkość spowodowana brakiem dodatkowych informacji Na podstawie porównania z tabeli można wysnuć wnioski: realizacja usługi opartej na protokole TCP jest korzystna gdy potrzebna jest stabilność komunikacji, wszystkie dane muszą dotrzeć do adresata, szybkość komunikacji ma mniejsze znaczenie; realizacja usługi opartej na protokole UDP jest korzystna gdy większe znaczenie ma szybkość działania (przekazania danych), nie jest niezbędne dostarczenie wszystkich danych. Dodatek. Ćwiczenia do samodzielnego wykonania Poniżej przedstawione są zadania do wykonania na ćwiczeniach lub do samodzielnego wykonania w zaciszu domowym. 1. Skompilować wszystkie przykłady (od 1 do 9). Można to wykonać z linii poleceń OS, z pomocą pliku wsadowego, lub z wykorzystaniem środowiska RealJ zainstalowanego na salach komputerowych. 2. Dla przykładu 1 (SendDatagram) i 2 (ReceiveDatagram): uruchomić na lokalnym stanowisku aplikację ReceiveDatagram (serwer) i aplikację SendDatagram (klient) tak aby aplikacje mogły się komunikować; zestawić połączenie pomiędzy dwoma stanowiskami wszystkie wyniki zanotować. 3. Dla przykładu 3 (DatagramClient) i 4 (DatagramServer):

16 uruchomić na lokalnym stanowisku aplikację DatagramClient, odczytać datę i godzinę na hostach: moskit.ie.tu.koszalin.pl, kos.man.koszalin.pl, innych wybranych hostach np. microsoft.com, wp.pl (usługi te mogą nie być dostępne lub czas odpowiedzi może być długi - ustawić timeout); zestawić połączenie pomiędzy dwoma stanowiskami: na jednym stanowisku pracujący serwer na drugim klient; wyniki wszystkich działań zanotować. 4. Dla przykładu 5 (CopyFileServer) i 6 (CopyFileClient): zestawić połączenie pomiędzy dwoma stanowiskami i skopiować wybrany plik (w prezentowanym przykładzie klient ma założony z góry rozmiar kopiowanego pliku - wartość tą należy ustawić dla własnego pliku), wyniki zanotować

Przykłady interfejsu TCP i UDP w Javie

Przykłady interfejsu TCP i UDP w Javie Przykłady interfejsu TCP i UDP w Javie W Javie interfejsy TCP i UDP znajdują się w pakiecie java.net http://docs.oracle.com/javase/6/docs/api/java/net/packagesummary.html 1 Przykład interfejsu UDP Protokół

Bardziej szczegółowo

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

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5. Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5. Schemat Internetu R R R R R R R 2 Model Internetu 3 Protokoły komunikacyjne stosowane w sieci Internet Protokoły warstwy

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 6 dr inż. Komunikowanie się procesów Z użyciem pamięci współdzielonej. wykorzystywane przede wszystkim w programowaniu wielowątkowym. Za pomocą przesyłania

Bardziej szczegółowo

Programowanie sieciowe

Programowanie sieciowe 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

Bardziej szczegółowo

Programowanie rozproszone w języku Java

Programowanie rozproszone w języku Java Wstęp Gniazda RMI Podsumowanie Programowanie rozproszone w języku Java Wojciech Rząsa wrzasa@prz-rzeszow.pl Katedra Informatyki i Automatyki, Politechnika Rzeszowska 25 maja 2015 Wojciech Rząsa, KIiA PRz

Bardziej szczegółowo

Java programowanie w sieci. java.net RMI

Java programowanie w sieci. java.net RMI Java programowanie w sieci java.net RMI Programowanie sieciowe OSI WARSTWA APLIKACJI (7) WARSTWA PREZENTACJI(6) WARSTWA SESJI (5) WARSTWA TRANSPORTU (4) DoD Warstwa aplikacji (HTTP) Transport (gniazdka)

Bardziej szczegółowo

Networking. Zaawansowane technologie Javy 2019

Networking. Zaawansowane technologie Javy 2019 Networking Zaawansowane technologie Javy 2019 Model klient-serwer W modelu klient-serwer (ang. client-server) dane trzymane są na serwerze, interfejs użytkownika i logika przetwarzania danych są realizowane

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 1 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa w klasie! 2 Język

Bardziej szczegółowo

Programowanie w języku Java

Programowanie w języku Java Programowanie w języku Java Wykład 4: Programowanie rozproszone: TCP/IP, URL. Programowanie sieciowe w Javie proste programowanie sieciowe (java.net) na poziomie UDP na poziomie IP na poziomie URL JDBC

Bardziej szczegółowo

Aplikacja wielowątkowa prosty komunikator

Aplikacja wielowątkowa prosty komunikator Aplikacja wielowątkowa prosty komunikator Klient 0 (host 1) Wątek 0 Komponent serwera Wątek pochodny 3.1 Klient 1 (host 2) Wątek 1 Komponent serwera Wątek pochodny 3.2 Host 4 Serwer Wątek 3 Klient 2 (host

Bardziej szczegółowo

Klient-Serwer Komunikacja przy pomocy gniazd

Klient-Serwer Komunikacja przy pomocy gniazd II Klient-Serwer Komunikacja przy pomocy gniazd Gniazda pozwalają na efektywną wymianę danych pomiędzy procesami w systemie rozproszonym. Proces klienta Proces serwera gniazdko gniazdko protokół transportu

Bardziej szczegółowo

Zadanie 2: transakcyjny protokół SKJ (2015)

Zadanie 2: transakcyjny protokół SKJ (2015) Zadanie 2: transakcyjny protokół SKJ (2015) 1 Wstęp Zadanie polega na zaprojektowaniu niezawodnego protokołu transakcyjnego bazującego na protokole UDP. Protokół ten ma być realizowany przez klasy implementujące

Bardziej szczegółowo

Komunikacja z użyciem gniazd aplikacje klient-serwer

Komunikacja z użyciem gniazd aplikacje klient-serwer Programowanie obiektowe Komunikacja z użyciem gniazd aplikacje klient-serwer Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej pawel.rogalinski @ pwr.wroc.pl Architektura

Bardziej szczegółowo

MODEL WARSTWOWY PROTOKOŁY TCP/IP

MODEL WARSTWOWY PROTOKOŁY TCP/IP MODEL WARSTWOWY PROTOKOŁY TCP/IP TCP/IP (ang. Transmission Control Protocol/Internet Protocol) protokół kontroli transmisji. Pakiet najbardziej rozpowszechnionych protokołów komunikacyjnych współczesnych

Bardziej szczegółowo

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

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu. Dr inż. Zofia Kruczkiewicz Dwa sposoby tworzenia apletów Dwa sposoby

Bardziej szczegółowo

Serwer współbieżny połączeniowy

Serwer współbieżny połączeniowy Serwery współbieżne 1. Serwery współbieżne serwery połączeniowe, usuwanie zakończonych procesów, serwery bezpołączeniowe, 2. Jednoprocesowe serwery współbieżne. koncepcja i implementacja. 1 Serwer współbieżny

Bardziej szczegółowo

Gniazda BSD implementacja w C#

Gniazda BSD implementacja w C# BSD implementacja w C# Implementacja w C#: Przestrzeń nazw: System.Net.Sockets Klasa: public class Socket : IDisposable Implementacja w C#: Konstruktor: public Socket( AddressFamily addressfamily, SocketType

Bardziej szczegółowo

Aplikacja wielow tkowa prosty komunikator

Aplikacja wielow tkowa prosty komunikator Aplikacja wielow tkowa prosty komunikator Klient 0 (host 1) W tek 0 Komponent serwera W tek pochodny 3.1 Klient 1 (host 2) W tek 1 Komponent serwera W tek pochodny 3.2 Host 4 Serwer W tek 3 Klient 2 (host

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 8 - wprowadzenie do obsługi plików tekstowych i wyjątków mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 11 grudnia 2017 1 / 34 mgr inż. Krzysztof

Bardziej szczegółowo

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

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2. Aplikacje RMI Część 2 Budowa aplikacji rozproszonych http://java.sun.com/j2se/1.5.0/docs/guide/rmi/socketfactory/index.html I. Implementacja gniazd dziedziczących po Socket i ServerSocket oraz produkcji

Bardziej szczegółowo

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html

Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Dr inż. Zofia Kruczkiewicz wykład 4 Programowanie aplikacji internetowych, wykład 4 1 1. Zadania aplikacji rozproszonych obiektów

Bardziej szczegółowo

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

Ćwiczenie 1. Kolejki IBM Message Queue (MQ) Ćwiczenie 1. Kolejki IBM Message Queue (MQ) 1. Przygotowanie Przed rozpoczęciem pracy, należy uruchomić "Kreator przygotowania WebSphere MQ" oraz przejść przez wszystkie kroki kreatora, na końcu zaznaczając

Bardziej szczegółowo

Podstawowe typy serwerów

Podstawowe typy serwerów Podstawowe typy serwerów 1. Algorytm serwera. 2. Cztery podstawowe typy serwerów. iteracyjne, współbieżne, połączeniowe, bezpołączeniowe. 3. Problem zakleszczenia serwera. 1 Algorytm serwera 1. Utworzenie

Bardziej szczegółowo

Wybrane działy Informatyki Stosowanej

Wybrane działy Informatyki Stosowanej Wybrane działy Informatyki Stosowanej Dr inż. Andrzej Czerepicki a.czerepicki@wt.pw.edu.pl http://www2.wt.pw.edu.pl/~a.czerepicki 2017 APLIKACJE SIECIOWE Definicja Architektura aplikacji sieciowych Programowanie

Bardziej szczegółowo

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

JAVA I SIECI. MATERIAŁY: http://docs.oracle.com/javase/tutorial/networking/index.html 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,

Bardziej szczegółowo

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

Sieci komputerowe. Wykład 7: Transport: protokół TCP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski Sieci komputerowe Wykład 7: Transport: protokół TCP Marcin Bieńkowski Instytut Informatyki Uniwersytet Wrocławski Sieci komputerowe (II UWr) Wykład 7 1 / 23 W poprzednim odcinku Niezawodny transport Algorytmy

Bardziej szczegółowo

Aplikacja Sieciowa wątki po stronie klienta

Aplikacja Sieciowa wątki po stronie klienta Aplikacja Sieciowa wątki po stronie klienta Na ostatnich zajęciach zajmowaliśmy się komunikacją pomiędzy klientem a serwerem. Wynikiem naszej pracy był program klienta, który za pomocą serwera mógł się

Bardziej szczegółowo

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

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Narzędzia i aplikacje Java EE Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl Niniejsze opracowanie wprowadza w technologię usług sieciowych i implementację usługi na platformie Java EE (JAX-WS) z

Bardziej szczegółowo

Przesyłania danych przez protokół TCP/IP

Przesyłania danych przez protokół TCP/IP Przesyłania danych przez protokół TCP/IP PAKIETY Protokół TCP/IP transmituje dane przez sieć, dzieląc je na mniejsze porcje, zwane pakietami. Pakiety są często określane różnymi terminami, w zależności

Bardziej szczegółowo

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

Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP. Ćwiczenie 2. Obsługa gniazd w C#. Budowa aplikacji typu klient-serwer z wykorzystaniem UDP. Wprowadzenie Gniazdo (ang. socket) z naszego punktu widzenia (czyli programów w.net) reprezentuje najniższy poziom

Bardziej szczegółowo

Zaawansowane aplikacje WWW - laboratorium

Zaawansowane aplikacje WWW - laboratorium Zaawansowane aplikacje WWW - laboratorium Przetwarzanie XML (część 2) Celem ćwiczenia jest przygotowanie aplikacji, która umożliwi odczyt i przetwarzanie pliku z zawartością XML. Aplikacja, napisana w

Bardziej szczegółowo

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

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3(); 1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {; static public void m2() {; void abstract m3(); default static void m4() {; a) Poprawnie zadeklarowano metodę m1() b) Poprawnie

Bardziej szczegółowo

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

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków mgr inż. Maciej Lasota Version 1.0, 13-05-2017 Spis treści Wyjątki....................................................................................

Bardziej szczegółowo

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

Kurs programowania. Wykład 10. Wojciech Macyna. 05 maja 2016 Wykład 10 05 maja 2016 Biblioteka wejścia/wyjścia (Input/Output) import java.io.*; Umożliwia przechowywania danych na nośniku zewnętrznym Dane moga być wysyłane do plików, na drukarkę, do bufora pamięci,

Bardziej szczegółowo

Protokoły sieciowe - TCP/IP

Protokoły sieciowe - TCP/IP Protokoły sieciowe Protokoły sieciowe - TCP/IP TCP/IP TCP/IP (Transmission Control Protocol / Internet Protocol) działa na sprzęcie rożnych producentów może współpracować z rożnymi protokołami warstwy

Bardziej szczegółowo

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

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Programowanie obiektowe Literatura: Autor: dr inŝ. Zofia Kruczkiewicz Java P. L. Lemay, Naughton R. Cadenhead Java Podręcznik 2 dla kaŝdego Języka Programowania Java Linki Krzysztof Boone oprogramowania

Bardziej szczegółowo

URL. Budowa URL (ang. Uniform Resource Locator): http://java.sun.com:80/docs/tutorial/index.html?name=net working#downloading

URL. Budowa URL (ang. Uniform Resource Locator): http://java.sun.com:80/docs/tutorial/index.html?name=net working#downloading Obsługa sieci URL Budowa URL (ang. Uniform Resource Locator): http://java.sun.com:80/docs/tutorial/index.html?name=net working#downloading protokół = http authority = java.sun.com:80 host = java.sun.com

Bardziej szczegółowo

Adresy URL. Zaawansowane technologie Javy 2019

Adresy URL. Zaawansowane technologie Javy 2019 Adresy URL Zaawansowane technologie Javy 2019 Podstawowe pojęcia dotyczące sieci Sieć to zbiór komputerów i innych urządzeń, które mogą się ze sobą komunikować w czasie rzeczywistym za pomocą transmisji

Bardziej szczegółowo

Zarządzanie ruchem w sieci IP. Komunikat ICMP. Internet Control Message Protocol DSRG DSRG. DSRG Warstwa sieciowa DSRG. Protokół sterujący

Zarządzanie ruchem w sieci IP. Komunikat ICMP. Internet Control Message Protocol DSRG DSRG. DSRG Warstwa sieciowa DSRG. Protokół sterujący Zarządzanie w sieci Protokół Internet Control Message Protocol Protokół sterujący informacje o błędach np. przeznaczenie nieosiągalne, informacje sterujące np. przekierunkowanie, informacje pomocnicze

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Platformy Programistyczne Zagadnienia sieciowe i wątki

Platformy Programistyczne Zagadnienia sieciowe i wątki Platformy Programistyczne Zagadnienia sieciowe i wątki Agata Migalska 27/28 maja 2014 Komunikacja sieciowa 1 Komunikacja sieciowa 2 Wiele wątków 3 Serializacja Architektura typu klient-serwer Architektura

Bardziej szczegółowo

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark

Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark Laboratorium - Przechwytywanie i badanie datagramów DNS w programie Wireshark Topologia Cele Część 1: Zapisanie informacji dotyczących konfiguracji IP komputerów Część 2: Użycie programu Wireshark do przechwycenia

Bardziej szczegółowo

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

Wątek - definicja. Wykorzystanie kilku rdzeni procesora jednocześnie Zrównoleglenie obliczeń Jednoczesna obsługa ekranu i procesu obliczeniowego Wątki Wątek - definicja Ciąg instrukcji (podprogram) który może być wykonywane współbieżnie (równolegle) z innymi programami, Wątki działają w ramach tego samego procesu Współdzielą dane (mogą operować

Bardziej szczegółowo

Gniazda komunikacji sieciowej w środowisku Java

Gniazda komunikacji sieciowej w środowisku Java Gniazda komunikacji sieciowej w środowisku Java Dariusz.Wawrzyniak@cs.put.poznan.pl 1 Obsługa gniazd 2 Obsługa komunikacji strumieniowej Obsługa komunikacji pakietowej Pakiet java.net Obsługa gniazd Pakiet

Bardziej szczegółowo

Java programowanie sieciowe

Java programowanie sieciowe Java programowanie sieciowe Podstawowe pojęcia dotyczące sieci Sieć to zbiór komputerów i innych urządzeń, które mogą się ze sobą komunikować w czasie rzeczywistym za pomocą transmisji danych. Każda maszyna

Bardziej szczegółowo

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji. JAVA Java jest wszechstronnym językiem programowania, zorientowanym obiektowo, dostarczającym możliwość uruchamiania apletów oraz samodzielnych aplikacji. Java nie jest typowym kompilatorem. Źródłowy kod

Bardziej szczegółowo

Bezpieczne uruchamianie apletów wg

Bezpieczne uruchamianie apletów wg Bezpieczne uruchamianie apletów wg http://java.sun.com/docs/books/tutorial/security1.2/ Zabezpieczenia przed uruchamianiem apletów na pisanych przez nieznanych autorów 1) ograniczenie możliwości odczytywania,

Bardziej szczegółowo

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP

Sieci komputerowe. Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP Sieci komputerowe Zajęcia 3 c.d. Warstwa transportu, protokoły UDP, ICMP Zadania warstwy transportu Zapewnienie niezawodności Dostarczanie danych do odpowiedniej aplikacji w warstwie aplikacji (multipleksacja)

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Laboratorium 1. Wstęp do programowania w języku Java. Narzędzia 1. Aby móc tworzyć programy w języku Java, potrzebny jest zestaw narzędzi Java Development Kit, który można ściągnąć

Bardziej szczegółowo

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

sieć 4) Mechanizm RMI jest zazwyczaj wykorzystywany w rozwiązaniach typu klient-serwer. RMI (Remote Method Invocation) zdalne wywołanie metod Część 1 1) RMI jest mechanizmem, który pozwala danej aplikacji: wywoływać metody obiektów zdalnych oraz uzyskać dostęp do obiektów zdalnych (np. w

Bardziej szczegółowo

Multimedia JAVA. Historia

Multimedia JAVA. Historia Multimedia JAVA mgr inż. Piotr Odya piotrod@sound.eti.pg.gda.pl Historia 1990 rozpoczęcie prac nad nowym systemem operacyjnym w firmie SUN, do jego tworzenia postanowiono wykorzystać nowy język programowania

Bardziej szczegółowo

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1

Autor: dr inż. Zofia Kruczkiewicz, Programowanie aplikacji internetowych 1 Wątki 1. Wątki - wprowadzenie Wątkiem nazywamy sekwencyjny przepływ sterowania w procesie, który wykonuje dany program np. odczytywanie i zapisywanie plików Program Javy jest wykonywany w obrębie jednego

Bardziej szczegółowo

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

Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez: Obiekty sieciowe - gniazda Komputery w sieci Internet komunikują się ze sobą poprzez: TCP (Transport Control Protocol) User Datagram Protocol (UDP). TCP/IP (IP - Iternet Protocol) jest warstwowym zestawem

Bardziej szczegółowo

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

Sieci komputerowe. Wykład 5: Warstwa transportowa: TCP i UDP. Marcin Bieńkowski. Instytut Informatyki Uniwersytet Wrocławski Sieci komputerowe Wykład 5: Warstwa transportowa: TCP i UDP Marcin Bieńkowski Instytut Informatyki Uniwersytet Wrocławski Sieci komputerowe (II UWr) Wykład 5 1 / 22 Warstwa transportowa Cechy charakterystyczne:

Bardziej szczegółowo

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła

Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła Architektura typu klient serwer: przesyłanie pliku tekstowo oraz logowania do serwera za pomocą szyfrowanego hasła Wydział Inżynierii Mechanicznej i Informatyki Instytut Informatyki Teoretycznej i Stosowanej

Bardziej szczegółowo

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

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej dr inż. Paweł Czarnul pczarnul@eti.pg.gda.pl Architektury usług internetowych laboratorium

Bardziej szczegółowo

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

Aplikacje w Javie- wykład 11 Wątki-podstawy 1 Aplikacje w Javie- wykład 11 Wątki-podstawy Treści prezentowane w wykładzie zostały oparte o: Barteczko, JAVA Programowanie praktyczne od podstaw, PWN, 2014 http://docs.oracle.com/javase/8/docs/ http://docs.oracle.com/javase/9/docs/

Bardziej szczegółowo

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

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1 Obiektowe programowanie rozproszone Java RMI Krzysztof Banaś Systemy rozproszone 1 Java RMI Mechanizm zdalnego wywołania metod Javy (RMI Remote Method Invocation) posiada kilka charakterystycznych cech,

Bardziej szczegółowo

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

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe Gniazda surowe Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź,9maja2006 Wstęp Gniazda surowe posiadają pewne właściwości, których brakuje gniazdom TCP i UDP: Gniazda surowe

Bardziej szczegółowo

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

RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego

Bardziej szczegółowo

Laboratorium Sieci Komputerowych - 2

Laboratorium Sieci Komputerowych - 2 Laboratorium Sieci Komputerowych - 2 Analiza prostych protokołów sieciowych Górniak Jakub Kosiński Maciej 4 maja 2010 1 Wstęp Zadanie polegało na przechwyceniu i analizie komunikacji zachodzącej przy użyciu

Bardziej szczegółowo

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak

Wykład 3 / Wykład 4. Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak Wykład 3 / Wykład 4 Na podstawie CCNA Exploration Moduł 3 streszczenie Dr inż. Robert Banasiak 1 Wprowadzenie do Modułu 3 CCNA-E Funkcje trzech wyższych warstw modelu OSI W jaki sposób ludzie wykorzystują

Bardziej szczegółowo

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW 1. Procedura korzystania ze strumieni danych Aby utworzyć plik: 1) Należy utworzyć obiekt (np. typu FileOutputStream), powiązany ze plikiem danych binarnych (np.

Bardziej szczegółowo

Java jako język programowania

Java jako język programowania Java jako język programowania Interpretowany programy wykonują się na wirtualnej maszynie (JVM Java Virtual Machine) Składnia oparta o język C++ W pełni zorientowany obiektowo (wszystko jest obiektem)

Bardziej szczegółowo

Programowanie obiektowe zastosowanie języka Java SE

Programowanie obiektowe zastosowanie języka Java SE Programowanie obiektowe zastosowanie języka Java SE Wstęp do programowania obiektowego w Javie Autor: dr inŝ. 1 Java? Java język programowania obiektowo zorientowany wysokiego poziomu platforma Javy z

Bardziej szczegółowo

Wykład 8: Obsługa Wyjątków

Wykład 8: Obsługa Wyjątków Wykład 8: Obsługa Wyjątków Wyjątki Wyjątek to sytuacja nienormalna, która pojawia się w trakcie wykonania programu. W językach bez obsługi wyjątków, błędy są wykrywane i obsługiwane ręcznie, zwykle przez

Bardziej szczegółowo

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

KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika KOMUNIKACJA MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska Komunikacja

Bardziej szczegółowo

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

K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Wykorzystano fragmenty wykładów M. Piotrowskiego i M. Wójcika K O M U N I K A C J A MIĘDZYPROCESOWA O B S Ł U G A WEJŚCIA/WYJŚCIA Waldemar Korłub Platformy Technologiczne KASK ETI Politechnika Gdańska

Bardziej szczegółowo

Ćwiczenie 1. Przygotowanie środowiska JAVA

Ćwiczenie 1. Przygotowanie środowiska JAVA Ćwiczenie 1 Przygotowanie środowiska JAVA 1. Wprowadzenie teoretyczne Instalacja JDK (Java Development Kit) NaleŜy pobrać z java.sun.com środowisko i zainstalować je. Następnie naleŝy skonfigurować środowisko.

Bardziej szczegółowo

Metody Metody, parametry, zwracanie wartości

Metody Metody, parametry, zwracanie wartości Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Metody Metody, parametry, zwracanie wartości Metody - co to jest i po co? Metoda to wydzielona część klasy, mająca

Bardziej szczegółowo

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

Łukasz Przywarty Wrocław, r. Grupa: WT/N 11:15-14:00. Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API Łukasz Przywarty 171018 Wrocław, 17.01.2013 r. Grupa: WT/N 11:15-14:00 Sprawozdanie z zajęć laboratoryjnych: OpenSSL - API Prowadzący: mgr inż. Mariusz Słabicki 1 / 5 1. Treść zadania laboratoryjnego W

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2: Wstęp do języka Java 3/4/2013 S.Deniziak: Programowanie obiektowe - Java 1 Cechy języka Java Wszystko jest obiektem Nie ma zmiennych globalnych Nie ma funkcji globalnych

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe III. Refleksja Małgorzata Prolejko OBI JA16Z03 Plan Klasa Class. Analiza funkcjonalności klasy. Podstawy obsługi wyjątków. Zastosowanie refleksji do analizy obiektów. Wywoływanie

Bardziej szczegółowo

Java a dost p do Internetu.

Java a dost p do Internetu. Java a dost p do Internetu. Robert A. Kªopotek r.klopotek@uksw.edu.pl Wydziaª Matematyczno-Przyrodniczy. Szkoªa Nauk cisªych, UKSW 20.04.2017 Java a dost p do Internetu Java Networking - jest koncepcj

Bardziej szczegółowo

Aplikacje RMI Lab4

Aplikacje RMI   Lab4 Aplikacje RMI https://docs.oracle.com/javase/tutorial/rmi/overview.html Lab4 Dr inż. Zofia Kruczkiewicz Programowanie aplikacji internetowych 1 1. Koncepcja budowy aplikacji RMI (aplikacja rozproszonych

Bardziej szczegółowo

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

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy Wykład 6, część 2 Jacek Rumiński 1 Język JAVA podstawy Plan wykładu: 1. Wprowadzenie do operacji wejścia/wyjścia: strumienie 2. Podstawowe klasy strumieni i InputStream/OutputStream

Bardziej szczegółowo

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) MAS dr. Inż. Mariusz Trzaska Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1) Zagadnienia o Podstawy o Kontrolowanie sterowania o Klasy o Interfejsy o Obsługa błędów o Pojemniki o System

Bardziej szczegółowo

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

Wykład 4: Protokoły TCP/UDP i usługi sieciowe. A. Kisiel,Protokoły TCP/UDP i usługi sieciowe N, Wykład 4: Protokoły TCP/UDP i usługi sieciowe 1 Adres aplikacji: numer portu Protokoły w. łącza danych (np. Ethernet) oraz w. sieciowej (IP) pozwalają tylko na zaadresowanie komputera (interfejsu sieciowego),

Bardziej szczegółowo

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej Politechnika Łódzka Instytut Systemów Inżynierii Elektrycznej Laboratorium komputerowych systemów pomiarowych Ćwiczenie 7 Wykorzystanie protokołu TCP do komunikacji w komputerowym systemie pomiarowym 1.

Bardziej szczegółowo

5. Model komunikujących się procesów, komunikaty

5. Model komunikujących się procesów, komunikaty Jędrzej Ułasiewicz str. 1 5. Model komunikujących się procesów, komunikaty Obecnie stosuje się następujące modele przetwarzania: Model procesów i komunikatów Model procesów komunikujących się poprzez pamięć

Bardziej szczegółowo

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

Wprowadzanie danych z klawiatury. Wyjątki związane z wprowadzaniem danych, przekroczeniem rozmiaru tablicy, dzieleniem przez zero itd. -1-1. Wyjątki 2. Przykładowe zadania Wyjątki Wyjątek w Java jest obiektem, który opisuje sytuację błędną powstałą w kodzie. Zaistnienie sytuacji błędnej w metodzie powoduje utworzenie obiektu reprezentującego

Bardziej szczegółowo

Plan wykładu. Domain Name System. Hierarchiczna budowa nazw. Definicja DNS. Obszary i ich obsługa Zapytania Właściwości.

Plan wykładu. Domain Name System. Hierarchiczna budowa nazw. Definicja DNS. Obszary i ich obsługa Zapytania Właściwości. Sieci owe Sieci owe Plan wykładu Domain Name System System Nazw Domen Definicja DNS Hierarchiczna budowa nazw Obszary i ich obsługa Zapytania Właściwości Sieci owe Sieci owe Definicja DNS DNS to rozproszona

Bardziej szczegółowo

Systemy Rozproszone - Ćwiczenie 6

Systemy Rozproszone - Ćwiczenie 6 Systemy Rozproszone - Ćwiczenie 6 1 Obiekty zdalne Celem ćwiczenia jest stworzenie obiektu zdalnego świadczącego prostą usługę nazewniczą. Nazwy i odpowiadające im punkty końcowe będą przechowywane przez

Bardziej szczegółowo

Sieci komputerowe Warstwa transportowa

Sieci komputerowe Warstwa transportowa Sieci komputerowe Warstwa transportowa 2012-05-24 Sieci komputerowe Warstwa transportowa dr inż. Maciej Piechowiak 1 Wprowadzenie umożliwia jednoczesną komunikację poprzez sieć wielu aplikacjom uruchomionym

Bardziej szczegółowo

Programowanie Obiektowe Ćwiczenie 4

Programowanie Obiektowe Ćwiczenie 4 Programowanie Obiektowe Ćwiczenie 4 1. Zakres ćwiczenia wyjątki kompozycja 2. Zagadnienia Założeniem, od którego nie należy odbiegać, jest by każdy napotkany problem (np. zatrzymanie wykonywanej metody)

Bardziej szczegółowo

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV Piotr Jarosik, Kamil Jaworski, Dominik Olędzki, Anna Stępień Dokumentacja wstępna TIN Rozproszone repozytorium oparte o WebDAV 1. Wstęp Celem projektu jest zaimplementowanie rozproszonego repozytorium

Bardziej szczegółowo

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

Transport. część 2: protokół TCP. Sieci komputerowe. Wykład 6. Marcin Bieńkowski Transport część 2: protokół TCP Sieci komputerowe Wykład 6 Marcin Bieńkowski Protokoły w Internecie warstwa aplikacji HTTP SMTP DNS NTP warstwa transportowa TCP UDP warstwa sieciowa IP warstwa łącza danych

Bardziej szczegółowo

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak Java język programowania obiektowego Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak 1 Język Java Język Java powstał w roku 1995 w firmie SUN Microsystems Java jest językiem: wysokiego

Bardziej szczegółowo

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura

Pierwsze kroki. Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com Pierwsze kroki Algorytmy, niektóre zasady programowania, kompilacja, pierwszy program i jego struktura Co znaczy

Bardziej szczegółowo

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton Dzisiejszy wykład Wzorce projektowe Visitor Client-Server Factory Singleton 1 Wzorzec projektowy Wzorzec nazwana generalizacja opisująca elementy i relacje rozwiązania powszechnie występującego problemu

Bardziej szczegółowo

Remote Quotation Protocol - opis

Remote Quotation Protocol - opis Remote Quotation Protocol - opis Michał Czerski 20 kwietnia 2011 Spis treści 1 Streszczenie 1 2 Cele 2 3 Terminologia 2 4 Założenia 2 4.1 Połączenie............................... 2 4.2 Powiązania z innymi

Bardziej szczegółowo

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

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1 Współbieżność i równoległość w środowiskach obiektowych Krzysztof Banaś Obliczenia równoległe 1 Java Model współbieżności Javy opiera się na realizacji szeregu omawianych dotychczas elementów: zarządzanie

Bardziej szczegółowo

Rozdział 4 KLASY, OBIEKTY, METODY

Rozdział 4 KLASY, OBIEKTY, METODY Rozdział 4 KLASY, OBIEKTY, METODY Java jest językiem w pełni zorientowanym obiektowo. Wszystkie elementy opisujące dane, za wyjątkiem zmiennych prostych są obiektami. Sam program też jest obiektem pewnej

Bardziej szczegółowo

Mechanizmy pracy równoległej. Jarosław Kuchta

Mechanizmy pracy równoległej. Jarosław Kuchta Mechanizmy pracy równoległej Jarosław Kuchta Zagadnienia Algorytmy wzajemnego wykluczania algorytm Dekkera Mechanizmy niskopoziomowe przerwania mechanizmy ochrony pamięci instrukcje specjalne Mechanizmy

Bardziej szczegółowo

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Programowanie w Sieci Internet Blok 2 - PHP Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki Co dziś będziemy robić Podstawy podstaw, czyli małe wprowadzenie do PHP, Podstawy

Bardziej szczegółowo

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1

Architektury systemów rozproszonych LABORATORIUM. Ćwiczenie 1 Architektury systemów rozproszonych LABORATORIUM Ćwiczenie 1 Temat: Aplikacja klient-serwer - implementacja w środowisku QT Creator. Przykładowy projekt aplikacji typu klient - serwer został udostępniony

Bardziej szczegółowo

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java Aplikacje Internetowe Podstawy języka Java Najprostsza aplikacja class Hello { public static void main(string[] args) { System.out.println("Hello World!"); Komponenty Javy JRE Java Runtime Environment

Bardziej szczegółowo

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

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna Język JAVA podstawy wykład 2, część 2 Jacek Rumiński 1 Język JAVA podstawy Plan wykładu: 1. Rodzaje programów w Javie 2. Tworzenie aplikacji 3. Tworzenie apletów 4. Obsługa archiwów 5. Wyjątki 6. Klasa

Bardziej szczegółowo

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

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run(). Wątki Streszczenie Celem wykładu jest wprowadzenie do obsługi wątków w Javie. Czas wykładu 45 minut. Definiowanie wątków jako klas potomnych Thread Nadpisanie metody run(). class Watek extends Thread public

Bardziej szczegółowo

Podstawowe protokoły transportowe stosowane w sieciach IP cz.1

Podstawowe protokoły transportowe stosowane w sieciach IP cz.1 Laboratorium Technologie Sieciowe Podstawowe protokoły transportowe stosowane w sieciach IP cz.1 Wprowadzenie Ćwiczenie przedstawia praktyczną stronę następujących zagadnień: połączeniowy i bezpołączeniowy

Bardziej szczegółowo