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 komunikacji TCP/IP w Java 2
Aplikacja sieciowa Aplikacja sieciowa rodzaj oprogramowania działającego w sieci, umożliwiające użytkownikowi wykorzystanie z wybranych usług sieciowych Aplikacja sieciowa korzysta z określonego protokołu W zależności od architektury współdziałania z innymi komputerami w sieci, wyróżniają architekturę aplikacji sieciowych 3
Architektury aplikacji sieciowych Architektura określa sposób współdziałania aplikacji sieciowych, sposób oferowania oraz korzystania z usług Architektura Peer-to-Peer Architektura Klient-Serwer Architektura wielowarstwowa 4
Architektura Peer-to-Peer Nie ma elementu centralnego Każdy z komputerów może świadczyć usługi oraz z nich korzystać Ta sama usługa może być świadczona przez wiele komputerów (lub wcale) Odporna na błędy pojedynczego komputera Problemy z zarządzaniem Kwestie bezpieczeństwa 5
Architektura klient-serwer Polega na podziale zadań przetwarzania informacji pomiędzy dostawcami usług (serwery) oraz konsumentami usług (klienci) Klienci oraz serwery mogą być zarówno urządzeniami fizycznymi tak i oprogramowaniem Sposób komunikowania się pomiędzy serwerem a klientem określa protokół 6
Architektura klient-serwer: zalety Scentralizowane zarządzanie usługami w sieci Zmiany konfiguracji serwera nie wymagają wprowadzania zmian na stacjach roboczych Scentralizowane udostępnianie i obróbka danych Wspólny dostęp wielu użytkowników do zasobów sieciowych Zarządzanie konfiguracją sieci z poziomu serwera Bezpieczeństwo Dane na serwerze są lepiej zabezpieczone niż na stacjach roboczych Możliwość przechowania danych użytkowników na serwerze wraz z regularnym wykonaniem kopii zapasowych Możliwość centralnej autentykacji użytkowników sieci Łączy wiele platform i systemów operacyjnych 7
Architektura klient-serwer: wady Awaria serwera może unieruchomić cała sieć Zarządzanie serwerem wymaga wysokich kwalifikacji Wysoka wydajność serwera skutkuje wysokimi kosztami jego zakupu oraz utrzymania 8
Architektury wielowarstwowe Architektura wielowarstwowa jest rozwinięciem architektury klient-serwer, w której przetwarzanie danych odbywa się na wydzielonych serwerach (warstwach). Najczęściej stosowaną architekturą jest architektura trójwarstwowa 9
Architektura wielowarstwowa Warstwa prezentacji interfejs aplikacji dla użytkownika końcowego Autoryzacja użytkowników Walidacja danych wprowadzanych przez klienta Prezentacja danych otrzymanych z serwera oraz ich obróbka nie wymagająca ponownego sięgania po dane do serwera (proste sortowanie, wyszukiwanie, podsumowanie itp.) Warstwa logiki biznesowej Przekształcenie danych wprowadzonych przez użytkownika, na zapytania skierowane do bazy danych Przekazanie danych uzyskanych z BD, do warstwy prezentacji Realizacja złożonych algorytmy przekształcania danych Warstwa danych Przechowanie danych oraz ich przetwarzanie Odbywa się po stronie serwera bazy danych 10
Architektura wielowarstwowa zalety i wady Zalety architektury trójwarstwowej Skalowalność Niezależność konfiguracji komponentów poszczególnych warstw Wysokie bezpieczeństwo Wysoka niezawodność Niskie wymagania w stosunku do klientów Wady architektury trójwarstwowej Wyższy koszt opracowania aplikacji Bardziej skomplikowana instalacji oraz konfiguracja aplikacji Wysoki koszt sprzętu oraz oprogramowania 11
Koncepcja programowania gniazd TCP/IP
Gniazdo TCP/IP Gniazdo (ang. Socket) jest drzwiami pomiędzy procesem aplikacji i protokołem TCP Projektant aplikacji kontroluje wszystko, co znajduje się po stronie warstwy aplikacji gniazda nie jest już tak w przypadku warstwy transportowej, co najwyżej twórca aplikacji dysponuje możliwością ustalenia kilku parametrów związanych z protokołem TCP, takich jak maksymalny rozmiar bufora i segmentu Programowanie na poziomie gniazda pozwala abstrahować się od niskopoziomowego programowania komunikacji TCP/IP
Algorytm komunikacji pomiędzy klientem a serwerem
Algorytm komunikacji pomiędzy klientem a serwerem (c.d.) Serwer oczekuje na połączenie Klienta Klient zwraca się do Serwera za pośrednictwem adresu IP oraz portu Serwer po zgłoszeniu się Klienta tworzy nowe gniazdo przeznaczone wyłącznie dla określonego klienta. Obiekt klasy ServerSocket Metoda o nazwie akcept() tworzy dla klienta nowe gniazdo Na końcu fazy negocjowania między gniazdem klienta i nowym gniazdem serwera istnieje połączenie TCP. Nowe dedykowane gniazdo serwera określamy mianem gniazda połączenia.
Przykład: nawiązanie połączenia od strony serwera int port = 1234; ServerSocket server = new ServerSocket(port); Socket klient = server.accept(); System.out.println("Połączono: " + klient.tostring() ); Wynik działania programu (po nawiązaniu połączenia z klientem)
Przykład: nawiązanie połączenia od strony klienta int port = 1234; String ip_adres = "192.168.1.25"; Socket klient = new Socket(ip_adres, port);
Strumień danych Strumień jest sekwencją znaków wysyłanych lub odbieranych przez proces. Zapis danych do gniazda DataOutputStream Program Odczyt danych z gniazda Socket InputStreamReader
Strumień danych (c.d.) Każdy strumień procesu może być strumieniem wejściowym lub strumieniem wyjściowym. Strumień wejściowy jest powiązany z określonym wejściowym źródłem procesu, którym na przykład może być standardowe urządzenie wejścia (klawiatura) lub gniazdo odbierające dane przychodzące z Internetu. Strumień wyjściowy jest powiązany z określonym wyjściowym źródłem procesu, takim jak standardowe urządzenie wyjścia (monitor) lub gniazdo, za pomocą którego dane są wysyłane do Internetu.
Przykład: zapis danych do strumienia DataOutputStream wyjsciowy = new DataOutputStream( socket.getoutputstream()); wyjsciowy.writechars("witam");
Przykład: odczyt danych ze strumienia InputStream wejsciowy = socket.getinputstream(); BufferedReader br = new BufferedReader( new InputStreamReader(wejsciowy)); System.out.println(br.readLine());