Programowanie aplikacji w architekturze Klient-Serwer - UDP
|
|
- Stefan Kubiak
- 8 lat temu
- Przeglądów:
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 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ółowoProgramy 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoJava 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ółowoNetworking. 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ółowoJę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ółowoProgramowanie 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ółowoAplikacja 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ółowoKlient-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ółowoZadanie 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ółowoKomunikacja 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ółowoMODEL 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ółowoSposoby 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ółowoSerwer 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ółowoGniazda 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ółowoAplikacja 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ółowoPodstawy 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ółowoAplikacje 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ółowoAplikacje 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) 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ółowoPodstawowe 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ółowoWybrane 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ółowoJAVA 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ółowoSieci 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ółowoAplikacja 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ółowoNarzę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ółowoPrzesył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. Wprowadzenie Gniazdo (ang. socket) z naszego punktu widzenia (czyli programów w.net) reprezentuje najniższy poziom
Bardziej szczegółowoZaawansowane 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ółowo1. 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ółowoProgramowanie 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ółowoKurs 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ółowoProtokoł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ółowoProgramowanie 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ółowoURL. 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ółowoAdresy 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ółowoZarzą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ółowoKonstruktory. 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ółowoPlatformy 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ółowoLaboratorium - 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ółowoWą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ółowoGniazda 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ółowoJava 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ółowoJAVA. 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ółowoBezpieczne 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ółowoSieci 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ółowoProgramowanie 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ółowosieć 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ółowoMultimedia 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ółowoAutor: 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ółowoObiekty 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ółowoSieci 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ółowoArchitektura 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ółowoKatedra 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ółowoAplikacje 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ółowoObiektowe 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ółowoGniazda 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ółowoRPC. 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ółowoLaboratorium 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ółowoWykł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ółowoSTRUMIENIE 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ółowoJava 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ółowoProgramowanie 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ółowoWykł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ółowoKOMUNIKACJA 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ółowoK 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 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ółowoMetody 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 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ółowoProgramowanie 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ółowoProgramowanie 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ółowoJava 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ółowoAplikacje 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ółowoJę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ółowoWykł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ółowoWykł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ółowoPolitechnika Łó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ółowo5. 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ółowoWprowadzanie 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ółowoPlan 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ółowoSystemy 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ółowoSieci 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ółowoProgramowanie 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ółowoDokumentacja 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ółowoTransport. 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ółowoJava. 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ółowoPierwsze 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ółowoDzisiejszy 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ółowoRemote 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ółowoWspół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ółowoRozdział 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ółowoMechanizmy 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ółowoProgramowanie 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ółowoArchitektury 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ółowoAplikacje 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ółowoJę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ółowoWą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ółowoPodstawowe 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