Programowanie aplikacji w architekturze Klient-Serwer - TCP
|
|
- Barbara Bielecka
- 9 lat temu
- Przeglądów:
Transkrypt
1 Katedra Inżynierii Komputerowej Koszalin 2002 Programowanie dla sieci Wykłady i ćwiczenia Dariusz Rataj Część 1 Programowanie aplikacji w architekturze Klient-Serwer - TCP Kontakt rataj@man.koszalin.pl Materiały dostępne pod adresem:
2 Spis treści Spis treści Wstęp - podstawowe pojęcia Architektura Klient-Serwer Interfejs Gniazd (Sockets API) Reprezentacja adresu IP (klasa pomocnicza - InetAddress) Budowa aplikacji klienta - protokół TCP (klasa Socket)... 8 Przykład aplikacji skanera portów... 9 Przykład aplikacji klienta usługi daytime Przykład aplikacji klienta usługi http Budowa aplikacji serwera - protokół TCP (klasa ServerSocket) Przykład aplikacji serwera - serwer iteracyjny Przykład aplikacji serwera - serwer współbieżny Przykład systemu komunikacji - prosty Chat Program serwera Program klienta Dodatek. Ćwiczenia do samodzielnego wykonania Wstęp - podstawowe pojęcia W celu usystematyzowania tworzenia i pracy sieci przyjęto model opisujący zależności poszczególnych elementów sieci. Jest to model OSI (Open System Interconnection) i jest to norma komunikacji komputerowej ISO (Rys. 1). Model ten dzieli zadania sieci na siedem warstw z których każda posiada konkretne zadania do wykonania. 7. Warstwa zastosowań 6. Warstwa prezentacji 5. Warstwa sesji 4. Warstwa transportowa 3. Warstwa sieciowa 2. Warstwa kanałowa 1. Warstwa fizyczna Rys. 1. Siedmiowarstwowy model sieci OSI Każda z warstw sieci posiada własne protokoły komunikacyjne. Natomiast grupę (zbiór) protokołów pracujących na różnych warstwach nazywamy rodziną protokołów. Sieć Internet oparta jest na rodzinie protokołów TCP/IP. Pomiędzy protokołami różnych warstw tworzy się tzw. interfejsy umożliwiające współpracę pomiędzy warstwami. W większości zastosowań wystarczy nam znajomość wersji modelu uproszczonego OSI - modelu czterowarstwowego (Rys. 2), w którym warstwy 5-7 i 1-2 zostały połączone
3 Połączone warstwy 5-7 nazywamy warstwą procesu (lub warstwą aplikacji). Połączone warstwy 1-2 nazywamy warstwą kanałową (lub warstwą fizyczną). Uproszczony model przedstawiony na jest jedynie ogólnie przyjętym schematem i może wyglądać inaczej (inne niestandardowe protokoły w poszczególnych warstwach) w zależności od systemu operacyjnego i konfiguracji systemu. Dla potrzeb programisty znajomość tego modelu jest wystarczająca. Warstwa aplikacji (procesu) (warstwy od 5 do 7 modelu OSI) SMTP TELNET RLOGIN FTP RPC INNE USŁUGI TCP Warstwa transportowa (warstwa 4 modelu OSI) UDP Warstwa sieciowa (warstwa 3 modelu OSI) Internet Protocol (IP) Warstwa kanałowa (fizyczna) (warstwy 1 i 2 modelu OSI) Sieć lokalna Sieć rozległa Rys. 2. Uproszczony czterowarstwowy model sieci - rodzina protokołów TCP/IP Dla celów programistycznych największe znaczenie w tym modelu mają protokoły TCP i UDP mające bezpośredni wpływ na wykorzystywane komponenty podczas procesu programowania zastosowań sieciowych. TCP (Transmission Control Protocol) - protokół umożliwiający połączenie logiczne dwóch urządzeń w sieci i transfer danych (potoku bajtów) w dwie strony z gwarancją dostarczenia danych do adresata. O takim protokole mówimy że jest to protokół z kontrolą połączenia. UDP (User Datagram Protocol) - protokół ten nie realizuje połączenia umożliwiającego transfer w dwie strony tak jak w przypadku TCP. Informacja jest przesyłana w formie datagramów bez gwarancji ich dostarczenia. O takim protokole mówimy że jest to protokół bez kontroli połączenia. Większość "popularnych" protokołów (usług) powyżej warstwy transportowej (http, ftp, telnet itd.) korzysta z protokołu TCP (z oczywistych powodów: konieczność utrzymania połączenia, potwierdzenie dostarczenia danych). Powyżej warstwy transportowej wszystkie usługi są jednoznacznie identyfikowane przez przydzielone numery zwane portami. Chcąc zrealizować połączenie należy znać dwa parametry: adres IP hosta (komputera), numer portu przydzielonego dla usługi, - 3 -
4 Numer portu jest wartością całkowitą zawierającą się w przedziale Niektóre usługi używają typowych, stałych numerów portów, identycznych dla wszystkich komputerów w sieci. Numery portów z zakresu zostały zarezerwowane dla tych właśnie usług systemowych i nie należy (chociaż jest to możliwe) ich wykorzystać w aplikacjach obsługi usług innych niż systemowe (standardowe). Także nie uda się przejęcie portu wykorzystywanego już przez inną usługę. 2. Architektura Klient-Serwer Architektura Klient-Serwer opiera się na istnieniu dwóch stron (dwóch procesów) biorących udział w połączeniu: Klient żądający dostępu do usługi, Serwer udostępniający usługę w sieci. Funkcje realizowane przez klienta można opisać: połączenie ze zdalnym hostem (przygotowanie do odbioru i wysyłania danych), odbiór danych, wysyłanie danych, zamknięcie połączenia. Funkcje realizowane przez serwer można ująć następująco: przywiązanie portu (zarezerwowanie portu dla danej usługi na hoście), nasłuch (oczekiwanie na zgłoszenie klienta), realizacja połączenia z klientem (akceptacja połączenia), wysyłanie danych, odbiór danych, zamknięcie połączenia. Na rysunku 3 przedstawiony został schemat połączenia w architekturze Klient-Serwer. Klient Ścieżka logiczna Serwer Warstwa aplikacji Warstwa aplikacji Warstwa transportowa (TCP,UDP) Warstwa transportowa (TCP,UDP) Warstwa sieciowa (IP) Warstwa sieciowa (IP) Warstwa kanałowa (fizyczna) Ścieżka fizyczna Rys. 3. Realizacja połączenia w architekturze Klient-Serwer Fizyczna realizacja wymiany danych jest procesem skomplikowanym składającym się z wielu operacji: warstwa aplikacji komunikuje się z warstwą transportową (TCP,UDP), warstwa transportowa komunikuje się z warstwą sieciową (IP), warstwa sieciowa komunikuje się z - 4 -
5 warstwą fizyczną (np. Ethernet). Po stronie serwera kolejność przepływu danych jest odwrotna. Z punktu widzenia programisty fizyczna ścieżka połączenia ma mniejsze znaczenie. Programista dysponuje jedynie interfejsem aplikacji i widzi jedynie swój komputer. Takie połączenie z pominięciem pośrednich warstw nazwano połączeniem logicznym. Realizację (programowanie) połączenia logicznego realizuje się wykorzystując odpowiedni interfejs programowy API (Application Program Interface). Podstawowym API wykorzystywanym do programowania zastosowań sieciowych jest interfejs gniazdek (Sockets API). 3. Interfejs Gniazd (Sockets API). Interfejs gniazd pojawił się wraz z systemem UNIX BSD w wersji 4.1c w roku 1982 i szybko stał się podstawowym narzędziem obsługi zastosowań sieciowych. Obecnie interfejs gniazdek dostępny jest w większości systemów operacyjnych w postaci bibliotek lub jako element jądra systemu. Sockets API dostępny jest w większości środowisk programistycznych różnych języków programowania (C, C++, Java, Pascal, Delphi itd.). Gniazdka stanowią API czyli kolejną warstwę-interfejs pomiędzy warstwą aplikacji i warstwą transportową (Rys. 4). Część systemu widoczna z punktu widzenia programisty Aplikacja klienta Aplikacja serwera Interfejs gniazdek Interfejs gniazdek Warstwa transportowa (TCP,UDP) Warstwa transportowa (TCP,UDP) Pozostałe warstwy sieci Rys. 4. Interfejs gniazdek w architekturze Klient-Serwer Od początku istnienia języka Java - Sockets API jest podstawowym pakietem obsługi sieci w tym języku. W języku Java nie mamy dostępu do warstw niższych (IP, Ethernet) sieci przez co programista jest "zmuszony" do korzystania z interfejsów wyższych warstw. W standardowych bibliotekach zawartych w JRE (Java Runtime) firmy SUN zbiór klas obsługi sieci umieszczony jest w pakiecie java.net. W skład pakietu wchodzą m.in.: InetAddress - klasa reprezentująca adres IP; Socket,ServerSocket - klasy używające do komunikacji protokołu TCP; DatagramPacket, DatagramSocket, MulticastSocket - klasy używające do komunikacji protokołu UDP; URL,URLConnection - używające do komunikacji protokołu TCP
6 Wymienione powyżej klasy są to jedynie podstawowe klasy pakietu java.net realizujące podstawowe zadania pakietu. W skład pakietu wchodzą również klasy pomocnicze i interfejsy obsługi wyjątków, klasy związane z autoryzacją Reprezentacja adresu IP (klasa pomocnicza - InetAddress) Klasa InetAddress jest obiektową reprezentacją adresu IP hosta. Umożliwia uzyskanie podstawowych informacji związanych z adresami: adresu lokalnego hosta, nazwy lokalnego hosta, adresu i nazwy zdalnego hosta. Klasa ta nie posiada publicznych konstruktorów i utworzenie obiektu możliwe jest dzięki metodom statycznym klasy: - public static InetAddress InetAddress.getLocalHost() metoda zwraca obiekt klasy InetAddress opisujący lokalny host (host na którym uruchomiono aplikację); - public static InetAddress InetAddress.getByName(String host) metoda zwraca obiekt klasy InetAddress opisujący zdalny host. Jako parametr host można użyć zarówno adres IP w postaci tekstowej (np. " ") jak i nazwy hosta (np. "termit.ie.tu.koszalin.pl"); - public static InetAddress[] InetAddress.getAllByName(String host) metoda zwraca tablicę obiektów typu InetAddress. Niektóre nazwy w DNS mają przypisany więcej niż jeden adres IP. Tablica obiektów zwróci informacje o wszystkich adresach IP (jeden adres w obiekcie typu InetAddress w zwracanej tablicy). Przeważnie nazwy posiadające kilka adresów IP są to hosty o dużym obciążeniu wymagające różnych adresów dla wielu realizowanych funkcji. Jako parametr podawana jest nazwa hosta (np. "kos.man.koszalin.pl"). Po utworzeniu obiektu klasy InetAddress można skorzystać z dwóch metod zwracających informacje o adresie: - public String gethostname() metoda zwraca nazwę hosta opisywanego przez obiekt; - public String gethostaddress() metoda zwraca adres IP hosta w postaci tekstowej opisywanego przez obiekt. Przykładowa aplikacja (Przykład 1) prezentuje pobranie informacji na temat hosta lokalnego (metoda getlocalhost()) oraz hosta zdalnego (metoda getbyname() z parametrami nazwa hosta i adres IP). Przykład 1. demoinetaddress.java import java.net.*; class demoinetaddress { public static void main (String[] args) { - 6 -
7 // pobranie danych lokalnego hosta InetAddress adres1 = InetAddress.getLocalHost(); System.out.println("Nazwa lokalnego hosta: " + adres1.gethostname()); System.out.println("Adres lokalnego hosta: " + adres1.gethostaddress() + "\n"); // pobranie danych hosta o znanej nazwie InetAddress adres2 = InetAddress.getByName("moskit.ie.tu.koszalin.pl"); System.out.println("Nazwa: " + adres2.gethostname()); System.out.println("Adres: " + adres2.gethostaddress() + "\n"); // pobranie danych hosta o znanym adresie IP InetAddress adres3 = InetAddress.getByName(" "); System.out.println("Nazwa: " + adres3.gethostname()); System.out.println("Adres: " + adres3.gethostaddress() + "\n"); catch (UnknownHostException e) { System.err.println(e); // koniec main // koniec demoinetaddress Wynik działania aplikacji demoinetaddress (host termit): termit> java demoinetaddress Nazwa lokalnego hosta: termit.ie.tu.koszalin.pl Adres lokalnego hosta: Nazwa: moskit.ie.tu.koszalin.pl Adres: Nazwa: kos.man.koszalin.pl Adres: Przykład getalladdresses (Przykład 2) pobiera wszystkie adresy IP przypisane do nazwy podanej jako parametr aplikacji wykorzystując metodę InetAddress.getAllByName(host). Pobrane adresy (obiekty) zapisywane są w tablicy obiektów adresy. Przykład 2. getalladdresses.java import java.net.*; class getalladdresses { public static void main (String[] args) { String host = "kos.man.koszalin.pl"; if (args.length > 0) host = args[0]; System.out.println("Adresy przypisane do nazwy " + host + ":\n"); InetAddress[] adresy = InetAddress.getAllByName(host); for (int i = 0; i < adresy.length; i++) { System.out.println(adresy[i]); catch (UnknownHostException ex) { System.err.println("Nie moge znalezc hosta " + host + " :(!"); - 7 -
8 // koniec catch // koniec main // koniec getalladdresses Wynik działania aplikacji getalladdresses: D:\java\examples\java getalladdresses kos.man.koszalin.pl Adresy przypisane do nazwy kos.man.koszalin.pl: kos.man.koszalin.pl/ kos.man.koszalin.pl/ D:\java\examples\java getalladdresses ibm.com Adresy przypisane do nazwy ibm.com: ibm.com/ ibm.com/ ibm.com/ ibm.com/ Budowa aplikacji klienta - protokół TCP (klasa Socket) Klasa Socket jest wykorzystywana przede wszystkim do budowy aplikacji klienta (aplikacji korzystającej z usługi) jako główna klasa tworząca połączenie z serwerem (połączenie TCP). Klasa ta wykorzystywana jest także po stronie serwera do komunikacji z klientem. Obiekt klasy Socket realizuje podstawowe zadania: zgłoszenie klienta do serwera, utrzymanie połączenia, zamknięcie połączenia. Klasa Socket posiada szereg (sześć) publicznych konstruktorów z czego dwa są najczęściej stosowane: - public Socket(String host, int port) konstruktor gniazda z parametrami: host - nazwa lub adres IP hosta serwera w postaci tekstowej typu String, port - numer portu usługi działającej na serwerze typu int; - public Socket(InetAddress address, int port) konstruktor gniazda z parametrami: address - obiekt klasy InetAddress reprezentujący adres serwera, port - numer portu usługi działającej na serwerze typu int. Kod utworzenia gniazdka wymaga obsługi odpowiednich wyjątków. Konstruktor klasy może zwrócić wyjątki: UnknownHostException - w sytuacji gdy nazwa lub IP hosta są nieznane; IOException - gdy wystąpi błąd operacji wejścia-wyjścia. Konstruktor może zwócić także wyjątek SecurityException w sytuacji gdy istnieje działający obiekt ochrony zasobów (security manager) i nie dopuszcza do połączenia. Obsługę SecurityException należy realizować w apletach. Security Manager maszyny wirtualnej wbudowanej w przeglądarkę internetową kontroluje prawa do połączenia i blokuje niektóre z nich. Przykładowy fragment poprawnie utworzonego gniazda klienta z obsługą wyjątków może wyglądać następująco: - 8 -
9 socket = new Socket("kos.man.koszalin.pl", 13);... catch (UnknownHostException ex) { System.err.println(ex); catch (IOException e) { System.err.println(ex); Po poprawnym utworzeniu obiektu gniazdka i ustanowieniu połączenia z serwerem należy utworzyć obiekty strumieni umożliwiające komunikację z serwerem. Służą do tego dwie metody klasy Socket: - public InputStream getinputstream() metoda zwraca obiekt wejściowy klasy InputStream służący jako strumień odczytu danych przychodzących z serwera. - public OutputStream getoutputstream() metoda zwraca obiekt wyjściowy klasy OutputStream służący jako strumień zapisu (wysłania) danych do serwera. W praktyce obiekty typu InputStream i OutputStream poddawane są często konwersji na inne typy strumieni. Wykonuje się to z uwagi na to że klasy te posiadają bardzo ograniczone możliwości zapisu i odczytu danych (niewielka ilość metod) i są niewygodne w użyciu. Strumień wejściowy konwertowany jest na obiekt-strumień klasy BufferedReader: BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); Dzięki takiej konwersji można wykorzystać metodę readline() odczytującą wartość typu String z gniazdka zamiast trudnych w obsłudze metod klasy InputStream. Strumień wyjściowy zamieniany jest na strumień-obiekt klasy PrintWriter: PrintWriter out = new PrintWriter(socket.getOutputStream(), true); Dzięki takiej konwersji strumienia OutputStream można wykorzystać szereg przeciążonych metod print(...) i println(...) klasy PrintWriter przeznaczonych do wysyłania (pisania) do gniazdka danych różnych typów. W celu zakończenia połączenia należy wywołać metodę close() na rzecz obiektu gniazdka. Jedynie w niektórych aplikacjach nie jest to niezbędne - w tych, w których czas życia obiektu gniazdka i działanie aplikacji kończy się wraz z ostatnią operacją na otwartym połączeniu (np.: przykładowa aplikacja daytime). Przykład aplikacji skanera portów Przykładowa aplikacja skanera portów (Przykład 3) wykonuje badanie możliwość realizacji połączenia na portach Jeżeli połączenie przebiega poprawnie na konsoli drukowany jest komunikat o działającym serwerze. W przypadku braku połączenia wywoływana jest - 9 -
10 obsługa wyjątka IOException. W tym konkretnym przypadku nie jest to traktowane jako błąd (nic się nie dzieje). Sprawdzanie portów odbywa się w pętli for gdzie następuje próba utworzenia obiektu klasy Socket z parametrami host (nazwa, ip hosta) oraz i (numer portu). W przypadku udanej próby połączenia, po wydruku informacji na konsoli, połączenie zostaje zamknięte metodą close(). Przedstawiony tu przykład prostego skanera portów jest niestety mało efektywny. Próba skanowania wykonana na serwerze moskit.ie.tu.koszalin.pl trwała około 15 minut co w praktyce jest nie do przyjęcia. Przyspieszenie działania takich rozwiązań można osiągnąć budując aplikację wielowątkową gdzie skanowanie odbywać się będzie na kilku portach jednocześnie (w kilku lub kilkunastu wątkach). Przykład 3. scannerports.java import java.net.*; import java.io.*; public class scannerports { public static void main(string[] args) { Socket socket; String host = "termit.ie.tu.koszalin.pl"; if (args.length > 0) host = args[0]; System.out.println("Skanuje porty hosta: " + host); for (int i = 1; i < 1024; i++) { socket = new Socket(host, i); System.out.println("na porcie " + i + " dziala serwer"); socket.close(); catch (UnknownHostException e) { System.err.println(e); break; catch (IOException e) { // brak serwera na tym porcie - nic sie nie dzieje // koniec for // koniec main // koniec skanerports Wynik działania aplikacji scannerports: D:\java\examples\java scannerports moskit.ie.tu.koszalin.pl Skanuje porty hosta: moskit.ie.tu.koszalin.pl na porcie 7 dziala serwer na porcie 9 dziala serwer na porcie 13 dziala serwer na porcie 19 dziala serwer na porcie 21 dziala serwer na porcie 22 dziala serwer na porcie 23 dziala serwer na porcie 25 dziala serwer na porcie 37 dziala serwer
11 na porcie 79 dziala serwer na porcie 80 dziala serwer na porcie 110 dziala serwer na porcie 111 dziala serwer na porcie 113 dziala serwer na porcie 174 dziala serwer na porcie 512 dziala serwer na porcie 513 dziala serwer na porcie 514 dziala serwer na porcie 540 dziala serwer Przykład aplikacji klienta usługi daytime Przykład 4 przedstawia implementację aplikacji prostego klienta usługi daytime. Daytime jest standardową usługą działającą na większości serwerów internetowych zwracającą bieżącą datę i godzinę na serwerze. Rysunek 5 wyjaśnia działanie komunikacji klienta z serwerem. host klienta host serwera daytimeclient socket in 1. zgłoszenie (żądanie) połączenia 2. odpowiedź serwera np. "Wed Sep 11 18:53: " Aplikacja obsługująca usługę serwer usługi (port nr 13) Rys. 5. Schemat działania aplikacji daytimeclient Usługa daytime jest przykładem najprostszej usługi możliwej do realizacji w sieci przy użyciu protokołu TCP. Od strony aplikacji klienta usługa ta realizowana jest w dwóch czynnościach: - zgłoszenie (żądanie) połączenia z serwerem usługi, - odebranie odpowiedzi od serwera tj. daty i godziny w postaci łańcucha tekstowego. Po wykonaniu tych działań połączenie zostaje zakończone (serwer zamyka połączenie). Przykład 4. daytimeclient.java import java.net.*; import java.io.*; public class daytimeclient { public static void main(string[] args) { Socket socket; String host = "kos.man.koszalin.pl"; BufferedReader in;
12 if (args.length > 0) host = args[0]; /* tworzenie gniazda klienta, pobranie danych, wydruk informacji na konsoli */ socket = new Socket(host, 13); in = new BufferedReader( new InputStreamReader(socket.getInputStream())); String time = in.readline(); System.out.println("Host: " + host + " zwraca na porcie nr 13:"); System.out.println("date i czas: " + time); catch (UnknownHostException e) { System.err.println(e); catch (IOException e) { System.err.println(e); // koniec main // koniec daytimeclient Wynik działania aplikacji daytimeclient: D:\java\examples\java daytimeclient moskit.ie.tu.koszalin.pl Host: moskit.ie.tu.koszalin.pl zwraca na porcie nr 13: date i czas: Sun Sep 22 14:11: Przykład aplikacji klienta usługi http W odróżnieniu od aplikacji daytime klient usługi http realizuje dwustronną wymianę danych z serwerem (Rys. 6). Od strony aplikacji klienta usługa http realizowana jest w trzech etapach: - zgłoszenie (żądanie) połączenia z serwerem usługi, - wysłanie komunikatu (zapytania) zgodnego z protokołem http, - odebranie odpowiedzi od serwera zawierającej nagłówek oraz zawartość dokumentu (dokumentu html, grafiki, muzyki itd.). host klienta host serwera httpclient socket out in 1. zgłoszenie (żądanie) połączenia 2. Wysłanie komunikatu (zapytania) zgodnego z http 3. Odpowiedź serwera zgodna z http (nagłówek + dokument) Aplikacja obsługująca usługę serwer usługi www (port nr 80) np. Apache Rys. 6. Schemat działania aplikacji httpclient
13 W przykładzie 5 program klienta wysyła komunikat do serwera zapisany w zmiennej message typu String. Zmienna message zawiera proste zapytanie zgodne z protokołem http - żądanie o domyślny dokument (najczęściej index.html) umieszczony w katalogu głównym serwera http: "GET / HTTP/1.1" Jest to żądanie (ang. request) typu GET standardowo wysyłane przez przeglądarki internetowe po wpisaniu adresu w polu adresów przeglądarki. Dla odróżnienia wysyłając wypełniony formularz ze strony www przeglądarka wysyła żądanie typu POST. Pozostałe linie zapytania są to dodatkowe informacje dla serwera: formaty odbieranych dokumentów, rodzaj połączenia, adres strony polecającej, informacje o przeglądarce, adres hosta klienta, format dokumentu itp. Dodatkowe parametry mogą być różne dla różnych przeglądarek i mogą, ale nie muszą, być wymagane przez serwer. Po odebraniu żądania przez serwer wysyłana jest odpowiedź: nagłówek odpowiedzi oraz dokument (w tym przykładzie zawartość dokumentu index.html z serwera termit). Pierwsza linia nagłówka ("HTTP/ OK") informuje o poprawnym przebiegu połączenia. W innym przypadku w tej linii znajdzie się informacja o błędzie. W dalszej części nagłówka znajdują się dodatkowe parametry odpowiedzi. Najważniejsze z nich to Content-Length zawierający długość dokumentu w bajtach oraz Content-Type informujący o formacie dokumentu. Nagłówek jest oddzielony od dokumentu linią pustą. Przykład 5. httpclient.java import java.io.*; import java.net.*; public class httpclient { // pobranie domyslnego dokumentu w glownym katalogu serwera http (/) // najczesciej index.html String message = "GET / HTTP/1.1\r\n"+ "Accept: */*\r\n" + // */ "Connection: close\r\n"+ "Referer: moskit.ie.tu.koszalin.pl\r\n"+ "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; IDG.pl)\r\n"+ "Host: moskit.ie.tu.koszalin.pl\r\n"+ "Content-Type: text/html\r\n"; void getdocument() { Socket socket; BufferedReader in; String tekst = "", all = ""; PrintWriter out = null; socket = new Socket("termit.ie.tu.koszalin.pl", 80); in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); out.println(message); System.out.println(" Komunikat http wyslany "); System.out.println(" Odpowiedz serwera: "); while( (tekst=in.readline())!=null){ System.out.println(tekst); in.close(); socket.close();
14 catch (UnknownHostException e) { System.err.println("Blad URL: sprawdz poprawnosc url"); catch (IOException e) { System.err.println("Blad I/O"); System.out.println(" Koniec odpowiedzi "); public httpclient() // konstruktor { getdocument(); public static void main(string args[]) { new httpclient(); // utworzenie obiektu klienta Wynik działania aplikacji httpclient - odwołanie do serwera http na hoście termit: D:\java\examples\java httpclient Komunikat http wyslany Odpowiedz serwera: HTTP/ OK Date: Wed, 11 Sep :25:12 GMT Server: Apache/ (Unix) PHP/4.1.2 Last-Modified: Fri, 28 Jul :58:55 GMT ETag: "229a d3f" Accept-Ranges: bytes Content-Length: 104 Connection: close Content-Type: text/html <html> <body> <meta http-equiv="refresh" CONTENT="0;URL= </body> </html> Budowa aplikacji serwera - protokół TCP (klasa ServerSocket) Zadaniem programu serwera jest realizacja usługi na rzecz klienta. Program serwera rozpoczyna pracę w systemie komputerowym po czym zasypia i oczekuje na zgłoszenie klienta zamawiającego jego usługę. W języku Java funkcję serwera połączeń z potwierdzeniem (TCP) realizują przede wszystkim obiekty klasy ServerSocket. Obiekt klasy ServerSocket nasłuchuje na przydzielonym porcie do momentu nadejścia zgłoszenia po czym budzi się i rozpoczyna realizację usługi. Aplikacja Javy (aplikacja wielowątkowa) może utworzyć kilka obiektów klasy ServerSocket a tym samym postawić klika serwerów czuwających na różnych portach (na jednym hoście, na każdym porcie może działać jeden i tylko jeden serwer!)
15 Serwery możemy podzielić na dwie podstawowe grupy: 1. serwery iteracyjne - obsługujące w danej chwili tylko jednego klienta. Kolejne zgłoszenia klientów oczekują w kolejce na połączenie z serwerem. Takie rozwiązania są najprostsze w realizacji lecz dla wielu zastosowań niewystarczające. Serwery iteracyjne buduje się dla prostych usług, w których czas obsługi usługi jest krótki i znany z góry. Jest to rozwiązanie stosowane również w specyficznych rozwiązaniach, w których serwer komunikuje się jedynie z jednym stałym klientem. Przykładem prostej usługi, w której z góry możemy określić ilość danych wysyłanych do klienta jest usługa daytime w której ilość danych przesyłanych jest niewielka i stała (przykład 4); 2. serwery współbieżne - realizowane w sytuacji gdy czas obsługi usługi może być różny w zależności od żądań klienta a także gdy serwer ma obsłużyć wyjątkowo dużo zgłoszeń od klientów. Serwer współbieżny (w Javie obiekt ServerSocket), po ustanowieniu połączenia, tworzy nowy proces (wątek) do wykonania zamówień klienta po czym ponownie zasypia w oczekiwaniu na kolejne zgłoszenie. Przykładami takich serwerów mogą być serwery usług ftp, http itd. Klasa ServerSocket posiada cztery publiczne konstruktory: - public ServerSocket() bezparametrowy konstruktor gniazda serwera. Utworzenie obiektu gniazda przy użyciu tego konstruktora nie wiąże gniazda z portem (obiekt nie jest gotowy do użycia). Wiązanie należy wykonać metodą bind; - public ServerSocket(int port) konstruktor gniazda serwera z parametrem port - numer portu wiązanego z serwerem typu int; - public ServerSocket(int port, int backlog) konstruktor gniazda z parametrami: port - numer portu wiązanego z serwerem typu int, backlog - długość kolejki oczekujących klientów (gdy ilość oczekujących klientów przekroczy tą wartość kolejne zgłoszenia będą odrzucane); - public ServerSocket(int port, int backlog, InetAddress bindaddr) konstruktor gniazda z parametrami: port - numer portu wiązanego z serwerem typu int, backlog - długość kolejki oczekujących klientów (gdy ilość oczekujących klientów przekroczy tą wartość kolejne zgłoszenia będą odrzucane) typu int, bindaddr - lokalny adres wiązany z serwerem usługi (parametr stosowany dla hostów posiadających kilka adresów, gniazdo będzie przyjmować zgłoszenia do jednego z nich) typu InetAddress. Kod utworzenia gniazdka serwera wymaga obsługi odpowiednich wyjątków. Konstruktor klasy może zwrócić wyjątki: IOException - gdy wystąpi błąd operacji wejścia-wyjścia; SecurityException - wyjątek ochrony (patrz: konstruktory klasy Socket). Przykładowy fragment poprawnie utworzonego gniazda serwera z obsługą wyjątków może wyglądać następująco:
16 ServerSocket server = new ServerSocket(80);... catch (IOException e) { System.out.println("Blad utworzenia gniazda"); W dalszej części przedstawione zostaną dwa przykłady - serwer iteracyjny i serwer współbieżny realizujące usługę http. W celu skrócenia kodów źródłowych serwery realizują odpowiedź serwera niezależną od komunikatów klienta (zawsze zwracają tą samą odpowiedź). Aby zwiększyć funkcjonalność przykładowych serwerów należy dołączyć metody analizy tekstu przysyłanych żądań i obsługi plików. Przykład aplikacji serwera - serwer iteracyjny Schemat działania aplikacji jhttpserver, prostego serwera http, przedstawiono na rysunku 7. Aplikacja realizuje funkcję serwera iteracyjnego - przyjmuje zgłoszenie klienta, realizuje usługę. Kolejny klient żądający połączenia oczekuje w kolejce na realizację połączenia. host serwera Aplikacja obsługująca usługę Klient usługi Klient usługi Realizowane połączenie Zgłoszenie oczekujące na zakończenie aktualnie realizowanego połączenia serwer iteracyjny (port 80) Rys. 7. Działanie serwera iteracyjnego jhttpserver Realizacja usługi zrealizowana została w nieskończonej pętli for: while (true) { socket = server.accept(); // uśpienie serwera... // tutaj obsługa usługi, pobranie strumieni z gniazda... // odebranie i wysłanie odpowiedzi Serwer przechodzi w stan uśpienia (za pomocą metody accept) po czym budzi się i realizuje usługę. Po zakończeniu ponownie wchodzi w stan uśpienia. Jeżeli kolejny klient zgłosił wcześniej żądanie (czeka w kolejce) serwer ponownie budzi się i realizuje usługę. Realizacja usługi w tym przykładzie polega na odebraniu komunikatu (zapytania) od klienta i wysłania odpowiedzi (zasada działania usługi http). Serwer można przetestować przy użyciu dowolnej przeglądarki internetowej (Rys. 9) podając adres localhost (dla serwera uruchamianego lokalnie)
17 Rys. 9. Wygląd dokumentu zwracanego przez jhttpserver w przeglądarce Dla uproszczenia kodu źródłowego serwer odbiera jedynie pierwszą linię żądania klienta. Serwer wysyła do klienta odpowiedź wygenerowaną przez metodę getanswer. Metoda ta zawiera dwie zmienne lokalne typu String: document, header. Odpowiedź serwera składana jest z tych dwóch zmiennych oddzielonych pustą linią (pusta linia jest separatorem oddzielającym nagłówek odpowiedzi od dokumentu - jest podstawowa informacja dla przeglądarki i jest niezbędna!): return header + "\r\n\r\n" + document; Niektóre fragmenty odpowiedzi serwera są (muszą być) generowane dynamicznie. W nagłówku odpowiedzi parametr Content-Length jest długością dokumentu w bajtach i jest wyznaczany metodą length klasy String. Dokument zwraca bieżącą datę i godzinę (obiekt klasy Date), nazwę i adres hosta. Przykład 6. jhttpserver.java import java.net.*; import java.io.*; import java.util.*; public class jhttpserver { private int port = 80; String getanswer() { InetAddress adres; String name = ""; String ip = ""; adres = InetAddress.getLocalHost(); name = adres.gethostname();
18 ip = adres.gethostaddress(); catch (UnknownHostException e) { System.err.println(e); String document = "<html>\r\n" + "<body><br>\r\n" + "<h2><font color=red>jhttpserver demo document\r\n" + "</font></h2>\r\n" + "<h3>server iteracyjny</h3><hr>\r\n" + "Data: <b>" + new Date() + "</b><br>\r\n" + "Nazwa hosta: <b>" + name + "</b><br>\r\n" + "IP hosta: <b>" + ip + "</b><br>\r\n" + "<hr>\r\n" + "</body>\r\n" + "</html>\r\n"; String header = "HTTP/ OK\r\n" + "Server: jhttpserver ver 1.1\r\n" + "Last-Modified: Fri, 28 Jul :58:55 GMT\r\n" + "Content-Length: " + document.length() + "\r\n" + "Connection: close\r\n" + "Content-Type: text/html"; return header + "\r\n\r\n" + document; public jhttpserver(int port){ this.port = port; Socket socket = null; ServerSocket server = new ServerSocket(port); while (true) { socket = server.accept(); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); System.out.println(" Pierwsza linia zapytania "); System.out.println(in.readLine()); System.out.println(" Wysylam odpowiedz "); System.out.println(getAnswer()); System.out.println(" Koniec odpowiedzi "); out.println(getanswer()); out.flush(); if (socket!= null) socket.close(); catch (IOException e) { System.out.println("Blad otwarcia"); public static void main(string[] args) { new jhttpserver(80); Przykład aplikacji serwera - serwer współbieżny Serwer jhttpserver z przykładu 6 został rozbudowany w przykładzie 7 (jhttpapp) o możliwość przetwarzania współbieżnego (wielowątkowego). Działanie serwera od strony
19 klienta wygląda identycznie jak w serwerze iteracyjnym (dane zwracane do przeglądarki są podobne). Zgodnie ze schematem działania z rysunku 8 uśpiony serwer oczekujący na zgłoszenie budzi się po czym tworzy nowy wątek aplikacji i przekazuje wątkowi realizację usługi. host serwera Klient usługi Klient usługi Realizowane połączenie Realizowane połączenie Aplikacja obsługująca usługę wątek 1 wątek 2 Klient usługi Nowe zgłoszenie klienta wątek-serwer oczekujący na kolejne zgłoszenie (accept) Rys. 8. Działanie serwera współbieżnego W aplikacji jhttpapp obiekt-serwer klasy ServerSocket czuwa na porcie 80 (metoda accept). Po zgłoszeniu klienta obiekt socket klasy Socket przekazywany jest jako parametr konstruktora klasy jhttpsmulti. Klasa ta dziedziczy po klasie Thread (ang. wątek) przeznaczonej do pracy jako dodatkowy wątek aplikacji. ServerSocket server = new ServerSocket(80); while (true) { Socket socket = server.accept(); // uśpienie serwera new jhttpsmulti(socket); // nowy obiekt-wątek aplikacji // while // try finally { server.close(); Obsługa klienta realizowana jest już tylko w obiekcie klasy jhttpsmulti natomiast serwer ponownie wchodzi w stan uśpienia (nieskończona pętla while). Realizację usługi wykonuje metoda run klasy jhttpsmulti wywołana pośrednio z poziomu konstruktora metodą start. Po wymianie danych z klientem działanie metody run kończy się a tym samym kończy się działanie obiektu klasy jhttpsmulti (obiekt przestaje istnieć). Przykład 7. jhttpapp.java import java.net.*; import java.io.*; import java.util.*; class jhttpsmulti extends Thread{ private Socket socket = null; String getanswer() {
20 InetAddress adres; String name = ""; String ip = ""; adres = InetAddress.getLocalHost(); name = adres.gethostname(); ip = adres.gethostaddress(); catch (UnknownHostException ex) { System.err.println(ex); String document = "<html>\r\n" + "<body><br>\r\n" + "<h2><font color=red>jhttpapp demo document\r\n" + "</font></h2>\r\n" + "<h3>server wspó³bie ny</h3><hr>\r\n" + "Data: <b>" + new Date() + "</b><br>\r\n" + "Nazwa hosta: <b>" + name + "</b><br>\r\n" + "IP hosta: <b>" + ip + "</b><br>\r\n" + "<hr>\r\n" + "</body>\r\n" + "</html>\r\n"; String header = "HTTP/ OK\r\n" + "Server: jhttpserver ver 1.1\r\n" + "Last-Modified: Fri, 28 Jul :58:55 GMT\r\n" + "Content-Length: " + document.length() + "\r\n" + "Connection: close\r\n" + "Content-Type: text/html; charset=iso "; return header + "\r\n\r\n" + document; public jhttpsmulti(socket socket){ System.out.println("Nowy obiekt jhttpsmulti..."); this.socket = socket; start(); public void run() { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); System.out.println(" Pierwsza linia zapytania "); System.out.println(in.readLine()); System.out.println(" Wysylam odpowiedz "); System.out.println(getAnswer()); System.out.println(" Koniec odpowiedzi "); out.println(getanswer()); out.flush(); catch (IOException e) { System.out.println("Blad IO danych!"); finally { if (socket!= null) socket.close(); catch (IOException e) { System.out.println("Blad zamkniecia gniazda!"); // finally
21 public class jhttpapp { public static void main(string[] args) throws IOException { ServerSocket server = new ServerSocket(80); while (true) { Socket socket = server.accept(); new jhttpsmulti(socket); // while // try finally { server.close(); // main 3.4. Przykład systemu komunikacji - prosty Chat Poniżej przedstawiony zostanie przykład systemu komunikacyjnego realizującego połączenie zgodne z modelem klient-serwer wykorzystującego klasy ServerSocket (po stronie serwera) i Socket (po stronie klienta). Aplikacje zrealizują prosty Chat (wymianę danych tekstowych) pomiędzy dwoma hostami. Możliwa będzie jedynie wymiana informacji na przemian (czytanie, pisanie, czytanie, pisanie,...) z jednym klientem. Połączenie Chat z wykorzystaniem serwera iteracyjnego przedstawia rysunek 9. host klienta host serwera SimpleClient socket 1. zgłoszenie (żądanie) połączenia SimpleSerwer serversocket in out Dane od klienta do serwera Dane od serwera do klienta socket out in Rys. 9. Komunikacja systemu Chat - serwer iteracyjny W bardziej rozbudowanych programach typu Chat realizowana jest współbieżna (wielowątkowa) praca serwera a także wielowątkowa praca klienta (czytanie z serwera, pisanie do serwera). Przykład Chat został wykorzystany jako przykład własnego systemu komunikacyjnego. W aplikacjach wymiany dźwięku, obrazu, danych numerycznych zasady realizacji komunikacji są identyczne Program serwera Najważniejszym elementem aplikacji serwera jest obiekt klasy ServerSocket, którego zadaniem jest udostępnienie portu (tutaj port nr 4444) aplikacji klienta i zestawienie połączenia. Zainicjowanie obiektu ServerSocket serversocket = new ServerSocket(4444); rezerwuje port wykorzystywany przez usługę
22 Metoda accept() klasy ServerSocket powoduje aktywowanie usługi: oczekiwanie na zgłoszenie klienta i zestawienie połączenia z klientem. clientsocket = serversocket.accept(); Metoda accept() zwraca obiekt - gniazdko identyfikujące klienta. Od tego momentu komunikacja z klientem odbywa się przez ten właśnie obiekt (tutaj clientsocket) natomiast obiekt serversocket nie jest używany. Komunikacja z klientem odbywa się za pośrednictwem strumieni (wejściowego i wyjściowego) pobranych z gniazdka klienta. Wysyłanie danych do klienta odbywa się przez obiekt strumień out typu PrintWriter: PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); Odbieranie danych od klienta odbywa się przez obiekt strumień in typu BufferedReader: BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); Wymiana danych między serwerem i klientem wykonywana jest na przemian (pisanie przez serwer, czytanie klienta, pisanie przez serwer, czytanie klienta,...) w pętli: while ((fromclient = in.readline())!= null) { System.out.println("Client: " + fromclient);... fromserver = stdin.readline(); // pobranie danych z konsoli... out.println(fromserver); // wyslanie danych do klienta... Wyjście z pętli następuje w sytuacji gdy klient przyśle polecenie 'exit', użytkownik serwera wyda polecenie 'quit', metoda in.readline() nie odczyta danych od klienta. W sytuacji gdy użytkownik serwera wyda polecenie 'exit' komunikat ten zostanie wysłany do klienta - klient zakończy działanie co spowoduje brak danych zwróconych przez in.readline(), natomiast serwer ponownie wejdzie w stan oczekiwania (czuwania) na zgłoszenie klienta (metoda accept()). Podobnie stanie się gdy podane zostanie polecenie 'quit' serwera z tą różnicą że serwer nie wejdzie w stan oczekiwania i nastąpi zakończenie pracy serwera. Przejście w stan ponownego oczekiwania na zgłoszenie klienta realizowane jest w pętli "nieskończonej" - while(true) {... w której umieszczone są wszystkie wyżej wymienione operacje. Wyjście z tej pętli realizowane jest tylko przez polecenie 'quit' wydane przez użytkownika serwera. Po zakończeniu pracy klienta i serwera konieczne jest zamknięcie odpowiednich strumieni klienta i serwera metodami close(). Przykład 8. SimpleServer.java import java.net.*; import java.io.*; public class SimpleServer { public static void main(string[] args) throws IOException { String fromclient="", fromserver=""; ServerSocket serversocket = null; // gniazdko serwera // zainicjowanie gniazdka na porcie nr 4444 serversocket = new ServerSocket(4444);
23 catch (IOException e) { System.err.println("Nie moge oczekiwac na porcie 4444!"); System.exit(1); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); while (true) { Socket clientsocket = null; // gniazdko klienta System.out.println("Jestem Serwer:"); System.out.println(" 'exit' - wyrzucenie Klienta i ponowne oczekiwanie"); System.out.println(" 'quit' - zakonczenie pracy"); System.out.println("Oczekiwanie na polaczenie..."); // wlaczenie nasluchu i ew. nawiazanie polaczenia clientsocket = serversocket.accept(); catch (IOException e) { System.err.println("Blad accept"); System.exit(1); // pobranie strumienia wyjsciowego klienta PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); // pobranie strumienia wejsciowego klienta BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); while ((fromclient = in.readline())!= null) // petla odczytu i zapisu do gniazdka { System.out.println("Client: " + fromclient); // wydruk na konsoli danych klienta if (fromclient.equals("exit")) { // zakonczenie przez klienta System.out.println("Client sie odlaczyl!!! "); break; if (fromserver.equals("quit")) break; // zakonczenie przez serwer System.out.print("Server: "); fromserver = stdin.readline(); // pobranie danych z konsoli if (fromserver!= null) { out.println(fromserver); // wyslanie danych do klienta out.close(); // zamkniecie otwartych strumieni i gniazdka in.close(); clientsocket.close(); if (fromserver.equals("quit")) break; // zakonczenie przez serwer stdin.close(); // zamkniecie strumienia z konsoli i gniazdka serwera serversocket.close(); Program klienta Aplikacja klient rozpoczyna działanie od zainicjowania gniazdka - zainicjowania obiektu (tutaj socket) klasy Socket. W konstruktorze klasy Socket podajemy dwa parametry adres hosta
24 serwera i port usługi (te dwa parametry ) jednoznacznie identyfikują program-serwer oczekujący na zgłoszenie klienta. socket = new Socket(" ", 4444); Jeżeli połączenie się powiodło konstruktor zwraca obiekt - gniazdko identyfikujące połączenie. Od tego momentu komunikacja z serwerem odbywa się przez ten właśnie obiekt (socket). Komunikacja z serwerem odbywa się za pośrednictwem strumieni (wejściowego i wyjściowego) pobranych z gniazdka socket. Wysyłanie danych do serwera odbywa się przez obiekt strumień out typu PrintWriter: PrintWriter out = new PrintWriter(socket.getOutputStream(), true); Odbieranie danych od serwera odbywa się przez obiekt strumień in typu BufferedReader: BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream())); Zasada wymiany danych za pośrednictwem strumieni jest podobna jak w przypadku aplikacji serwera i wykonywana jest na przemian (czytanie danych z serwera, pisanie przez klienta, czytanie danych z serwera, pisanie przez klienta,...) w pętli: while ((fromserver = in.readline())!= null) { // wydruk na konsoli danych z serwera System.out.println("Server: " + fromserver);... fromuser = stdin.readline(); // pobranie danych z konsoli... out.println(fromuser); // wyslanie danych do serwera Wyjście z pętli (zakończenie działania klienta) nastąpi w sytuacji gdy z serwera zostanie przysłany komunikat 'exit' (wyłączenie klienta przez serwer) lub komunikat 'quit' (zakonczenie pracy serwera). Jeżeli użytkownik klienta wyda polecenie 'exit' zostanie ono wysłane do serwera i serwer zakończy działanie klienta. Identycznie jak w aplikacji serwera na zakończenie pracy klienta należy zamknąć wszystkie otwarte strumienie. Przykład 9. SimpleClient.java import java.io.*; import java.net.*; public class SimpleClient { public static void main(string[] args) throws IOException { Socket socket = null; // gniazdko PrintWriter out = null; // strumien wyjsciowy - dane wysylane na server BufferedReader in = null; // strumien wejsciowy - dane czytane z servera String fromserver, fromuser; // zainicjowanie gniazdka socket = new Socket(" ", 4444); System.out.println("Czekam na wiadomosc z Servera..."); // pobranie strumienia wyjsciowego serwera
25 out = new PrintWriter(socket.getOutputStream(), true); // pobranie strumienia wejsciowego serwera in = new BufferedReader(new InputStreamReader(socket.getInputStream())); catch (UnknownHostException e) { System.err.println("Nieznany adres hosta"); System.exit(1); catch (IOException e) { System.err.println("Blad operacji Wejscia/Wyjscia - I/O error"); System.exit(1); // stdin - wejœcie standardowe (wej. konsoli java) BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); out.println("jest na linii! Pisz Serwerze!!!"); while ((fromserver = in.readline())!= null) // petla odczytu i zapisu do gniazdka { System.out.println("Server: " + fromserver); // wydruk na konsoli danych z serwera if (fromserver.equals("exit") fromserver.equals("quit")) // zakonczenie przez serwer { System.out.println("Zostalem wyrzucony przez Server!"); break; System.out.print("Client: "); fromuser = stdin.readline(); // pobranie danych z konsoli if (fromuser!= null) { out.println(fromuser); // wyslanie danych do serwera out.close(); // zamkniecie otwartych strumieni i gniazdka in.close(); stdin.close(); socket.close(); 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: uruchomić aplikację i zanotować wyniki (nazwy i adresy); zmodyfikować program i sprawdzić adresy hostów: wbiis.tu.koszalin.pl, puma.tu.koszalin.pl, microsoft.com; zmodyfikować program i sprawdzić nazwy hostów: , , ; wszystkie wyniki zanotować. 3. Dla przykładu 2:
26 zbadać adresy IP dla nazw: ibm.com, microsoft.com, java.sun.com, kos.man.koszalin.pl; zanotować wyniki. 4. Dla przykładu 3: wykonać skanowanie portów sąsiada (sąsiedniego komputera na sali); nie skanować (!) serwerów uczelnianych (moskit, termit itd.); zanotować wyniki. 5. Dla przykładu 4: pobrać datę i czas z hostów: moskit.ie.tu.koszalin.pl, puma.tu.koszalin.pl, kos.man.koszalin.pl, termit.ie.tu.koszalin.pl; zmodyfikować program zmieniając nr portu na 80 (http) i uruchomić (Uwaga! jeżeli nie jest ustawiony timeout dla gniazda aplikacja będzie czekać bez końca - ustawić timeout); zanotować wyniki. 6. Dla przykładu 5: uruchomić aplikację i pobrać strony z hostów: moskit.ie.tu.koszalin.pl, puma.tu.koszalin.pl, kos.man.koszalin.pl, termit.ie.tu.koszalin.pl; zmodyfikować aplikację i możliwość zapisu dokumentu do pliku. 7. Dla przykładu 6: uruchomić aplikację serwera i przetestować za pomocą przeglądarki IE oraz Netscape (jeżeli jest dostępny na stanowisku); uruchomić aplikację serwera i aplikację httpclient z przykładu 5 tak aby httpclient komunikował się z jhttpserver. 8. Dla przykładu 7: uruchomić aplikację serwera i przetestować za pomocą przeglądarki IE oraz Netscape (jeżeli jest dostępny na stanowisku); uruchomić aplikację serwera i aplikację httpclient z przykładu 5 tak aby httpclient komunikował się z jhttpserver. 9. Dla przykładu 8 i 9: zestawić połączenie między dwoma sąsiednimi stanowiskami; sprawdzić ile zgłoszeń klientów może oczekiwać w kolejce serwera; wyniki zanotować
Komunikacja w sieci Industrial Ethernet z wykorzystaniem Protokołu S7 oraz funkcji PUT/GET
PoniŜszy dokument zawiera opis konfiguracji programu STEP7 dla sterowników SIMATIC S7 300/S7 400, w celu stworzenia komunikacji między dwoma stacjami S7 300 za pomocą sieci Industrial Ethernet, protokołu
System Informatyczny CELAB. Przygotowanie programu do pracy - Ewidencja Czasu Pracy
Instrukcja obsługi programu 2.11. Przygotowanie programu do pracy - ECP Architektura inter/intranetowa System Informatyczny CELAB Przygotowanie programu do pracy - Ewidencja Czasu Pracy Spis treści 1.
VLAN Ethernet. być konfigurowane w dowolnym systemie operacyjnym do ćwiczenia nr 6. Od ćwiczenia 7 należy pracować ć w systemie Linux.
VLAN Ethernet Wstęp Ćwiczenie ilustruje w kolejnych krokach coraz bardziej złożone one struktury realizowane z użyciem wirtualnych sieci lokalnych. Urządzeniami, które będą realizowały wirtualne sieci
API transakcyjne BitMarket.pl
API transakcyjne BitMarket.pl Wersja 20140314 1. Sposób łączenia się z API... 2 1.1. Klucze API... 2 1.2. Podpisywanie wiadomości... 2 1.3. Parametr tonce... 2 1.4. Odpowiedzi serwera... 3 1.5. Przykładowy
Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego
Opis zmian funkcjonalności platformy E-GIODO wprowadzonych w związku z wprowadzeniem możliwości wysyłania wniosków bez podpisu elektronicznego Wstęp. Dodanie funkcjonalności wysyłania wniosków bez podpisów
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
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
PERSON Kraków 2002.11.27
PERSON Kraków 2002.11.27 SPIS TREŚCI 1 INSTALACJA...2 2 PRACA Z PROGRAMEM...3 3. ZAKOŃCZENIE PRACY...4 1 1 Instalacja Aplikacja Person pracuje w połączeniu z czytnikiem personalizacyjnym Mifare firmy ASEC
Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.
Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania
Systemy mikroprocesorowe - projekt
Politechnika Wrocławska Systemy mikroprocesorowe - projekt Modbus master (Linux, Qt) Prowadzący: dr inż. Marek Wnuk Opracował: Artur Papuda Elektronika, ARR IV rok 1. Wstępne założenia projektu Moje zadanie
VinCent Office. Moduł Drukarki Fiskalnej
VinCent Office Moduł Drukarki Fiskalnej Wystawienie paragonu. Dla paragonów definiujemy nowy dokument sprzedaży. Ustawiamy dla niego parametry jak podano na poniższym rysunku. W opcjach mamy możliwość
GEO-SYSTEM Sp. z o.o. GEO-RCiWN Rejestr Cen i Wartości Nieruchomości Podręcznik dla uŝytkowników modułu wyszukiwania danych Warszawa 2007
GEO-SYSTEM Sp. z o.o. 02-732 Warszawa, ul. Podbipięty 34 m. 7, tel./fax 847-35-80, 853-31-15 http:\\www.geo-system.com.pl e-mail:geo-system@geo-system.com.pl GEO-RCiWN Rejestr Cen i Wartości Nieruchomości
Instrukcja postępowania w celu podłączenia do PLI CBD z uwzględnieniem modernizacji systemu w ramach projektu PLI CBD2
Urząd Komunikacji Projekt PLI Elektronicznej CBD2 Faza projektu: E-3 Rodzaj dokumentu: Instrukcje Odpowiedzialny: Paweł Sendek Wersja nr: 1 z dnia 31.03.2015 Obszar projektu: Organizacyjny Status dokumentu:
CGI i serwlety. Plan wykładu. Wykład prowadzi Mikołaj Morzy. Przykład: serwlety vs. szablony. Implementacja logiki prezentacji
Wykład prowadzi Mikołaj Morzy CGI i serwlety Plan wykładu Metody konstrukcji logiki prezentacji Programy CGI Serwlety Java implementacja korzystanie z nagłówków obsługa zmiennych Cookies obsługa sesji
Sieci komputerowe. Definicja. Elementy 2012-05-24
Sieci komputerowe Wprowadzenie dr inż. Maciej Piechowiak Definicja grupa komputerów lub innych urządzeń połączonych ze sobą w celu wymiany danych lub współdzielenia różnych zasobów Elementy Cztery elementy
Zainstalowana po raz pierwszy aplikacja wymaga aktualizacji bazy danych obsługiwanych sterowników.
FRISKO-MOBILE Aplikacja FRISKO-MOBILE przeznaczona jest do zdalnej obsługi sterowników FRISKO podłączonych do sieci LAN o stałym adresie IP za pośrednictwem wbudowanych lub zewnętrznych modułów komunikacyjnych.
Microsoft Management Console
Microsoft Management Console Konsola zarządzania jest narzędziem pozwalającym w prosty sposób konfigurować i kontrolować pracę praktycznie wszystkich mechanizmów i usług dostępnych w sieci Microsoft. Co
WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH
WYMAGANIA EDUKACYJNE I KRYTERIA OCENIANIA Z PRZEDMIOTU PROGRAMOWANIE APLIKACJI INTERNETOWYCH Klasa: 3TIR - Technik informatyk Program: 351203 Wymiar: 4 h tygodniowo Podręcznik: Kwalifikacja E.14 Programowanie
InsERT GT Własne COM 1.0
InsERT GT Własne COM 1.0 Autor: Jarosław Kolasa, InsERT Wstęp... 2 Dołączanie zestawień własnych do systemu InsERT GT... 2 Sposób współpracy rozszerzeń z systemem InsERT GT... 2 Rozszerzenia standardowe
Warszawa, 08.01.2016 r.
Warszawa, 08.01.2016 r. INSTRUKCJA KORZYSTANIA Z USŁUGI POWIADOMIENIA SMS W SYSTEMIE E25 BANKU BPS S.A. KRS 0000069229, NIP 896-00-01-959, kapitał zakładowy w wysokości 354 096 542,00 złotych, który został
Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x
Wdrożenie modułu płatności eservice dla systemu Virtuemart 2.0.x Wersja 02 Styczeń 2016 Centrum Elektronicznych Usług Płatniczych eservice Sp. z o.o. Spis treści 1. Wstęp... 3 1.1. Przeznaczenie dokumentu...
Akademickie Centrum Informatyki PS. Wydział Informatyki PS
Akademickie Centrum Informatyki PS Wydział Informatyki PS Wydział Informatyki Sieci komputerowe i Telekomunikacyjne ROUTING Krzysztof Bogusławski tel. 4 333 950 kbogu@man.szczecin.pl 1. Wstęp 2. Tablica
POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO
POLITYKA PRYWATNOŚCI SKLEPU INTERNETOWEGO www.tokyotey.pl 1. Zagadnienia wstępne. 1. Pod pojęciem Serwisu rozumie się stronę internetową znajdującą się pod adresem www.tokyotey.pl wraz z wszelkimi podstronami
Automatyzacja procesu publikowania w bibliotece cyfrowej
Automatyzacja procesu publikowania w bibliotece cyfrowej Jakub Bajer Biblioteka Politechniki Poznańskiej Krzysztof Ober Poznańska Fundacja Bibliotek Naukowych Plan prezentacji 1. Cel prezentacji 2. Proces
REGULAMIN INTERNETOWEJ OBSŁUGI KLIENTA
REGULAMIN INTERNETOWEJ OBSŁUGI KLIENTA Niniejszy Regulamin określa zasady korzystania z usługi Internetowej Obsługi Klienta (ebok). Rejestrując się, Klient potwierdza, że zapoznał się z treścią regulaminu
Kancelaris - Zmiany w wersji 2.50
1. Listy Kancelaris - Zmiany w wersji 2.50 Zmieniono funkcję Dostosuj listę umożliwiając: o Zapamiętanie wielu widoków dla danej listy o Współdzielenie widoków między pracownikami Przykład: Kancelaria
epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji
epuap Ogólna instrukcja organizacyjna kroków dla realizacji integracji Projekt współfinansowany ze środków Europejskiego Funduszu Rozwoju Regionalnego w ramach Programu Operacyjnego Innowacyjna Gospodarka
Zarządzanie Zasobami by CTI. Instrukcja
Zarządzanie Zasobami by CTI Instrukcja Spis treści 1. Opis programu... 3 2. Konfiguracja... 4 3. Okno główne programu... 5 3.1. Narzędzia do zarządzania zasobami... 5 3.2. Oś czasu... 7 3.3. Wykres Gantta...
Regu g l u a l min i n w s w pó p ł ó p ł r p acy O ow o iązuje od dnia 08.07.2011
Regulamin współpracy Obowiązuje od dnia 08.07.2011 1 1. Wstęp Regulamin określa warunki współpracy z firmą Hubert Joachimiak HubiSoft. W przypadku niejasności, prosimy o kontakt. Dane kontaktowe znajdują
Zdalne odnawianie certyfikatów do SWI
Zdalne odnawianie certyfikatów do SWI Instrukcja użytkownika Wersja 1.0 Strona 1 Spis treści Wstęp... 3 Dostęp do systemu... 4 Wymagania systemowe... 5 Instalacja certyfikatu użytkownika... 8 Sprawdzenie
Harmonogramowanie projektów Zarządzanie czasem
Harmonogramowanie projektów Zarządzanie czasem Zarządzanie czasem TOMASZ ŁUKASZEWSKI INSTYTUT INFORMATYKI W ZARZĄDZANIU Zarządzanie czasem w projekcie /49 Czas w zarządzaniu projektami 1. Pojęcie zarządzania
System kontroli wersji SVN
System kontroli wersji SVN Co to jest system kontroli wersji Wszędzie tam, gdzie nad jednym projektem pracuje wiele osób, zastosowanie znajduje system kontroli wersji. System, zainstalowany na serwerze,
Postanowienia ogólne. Usługodawcy oraz prawa do Witryn internetowych lub Aplikacji internetowych
Wyciąg z Uchwały Rady Badania nr 455 z 21 listopada 2012 --------------------------------------------------------------------------------------------------------------- Uchwała o poszerzeniu możliwości
Bazy danych II. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski
Bazy danych II Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski Wykład 11 Zastosowanie PHP do programowania aplikacji baz danych Oracle Wsparcie programowania w PHP baz danych Oracle Oprócz możliwego
SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI
SKRÓCONA INSTRUKCJA OBSŁUGI ELEKTRONICZNEGO BIURA OBSŁUGI UCZESTNIKA BADANIA BIEGŁOŚCI 1. CO TO JEST ELEKTRONICZNE BIURO OBSŁUGI UCZESTNIKA (EBOU) Elektroniczne Biuro Obsługi Uczestnika to platforma umożliwiająca
8. Konfiguracji translacji adresów (NAT)
8. Konfiguracji translacji adresów (NAT) Translacja adresów nazywana również maskaradą IP jest mechanizmem tłumaczenia adresów prywatnych sieci lokalnej na adresy publiczne otrzymane od operatora. Rozróżnia
Budowa systemów komputerowych
Budowa systemów komputerowych dr hab. inż. Krzysztof Patan, prof. PWSZ Instytut Politechniczny Państwowa Wyższa Szkoła Zawodowa w Głogowie k.patan@issi.uz.zgora.pl Współczesny system komputerowy System
Chmura obliczeniowa. do przechowywania plików online. Anna Walkowiak CEN Koszalin 2015-10-16
Chmura obliczeniowa do przechowywania plików online Anna Walkowiak CEN Koszalin 2015-10-16 1 Chmura, czyli co? Chmura obliczeniowa (cloud computing) to usługa przechowywania i wykorzystywania danych, do
Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT
Opis obsługi systemu Ognivo2 w aplikacji Komornik SQL-VAT Spis treści Instrukcja użytkownika systemu Ognivo2... 3 Opis... 3 Konfiguracja programu... 4 Rejestracja bibliotek narzędziowych... 4 Konfiguracja
Instrukcja programu PControl Powiadowmienia.
1. Podłączenie zestawu GSM. Instrukcja programu PControl Powiadowmienia. Pierwszym krokiem w celu uruchomienia i poprawnej pracy aplikacji jest podłączenie zestawu GSM. Zestaw należy podłączyć zgodnie
emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce)
emszmal 3: Automatyczne księgowanie przelewów w sklepie internetowym Magento (plugin dostępny w wersji ecommerce) Zastosowanie Rozszerzenie to dedykowane jest sklepom internetowych zbudowanym w oparciu
Spis treści INTERFEJS (WEBSERVICES) - DOKUMENTACJA TECHICZNA 1
I N T E R F E J S W E BSERVICES NADAWANIE PAKIETÓW DO S YSTEMU MKP P RZEZ INTERNET D O K U M E N T A C J A T E C H N I C Z N A S T Y C Z E Ń 2 0 1 2 Spis treści 1. Wstęp... 2 2. Informacje ogólne... 2
Sieci komputerowe cel
Sieci komputerowe cel współuŝytkowanie programów i plików; współuŝytkowanie innych zasobów: drukarek, ploterów, pamięci masowych, itd. współuŝytkowanie baz danych; ograniczenie wydatków na zakup stacji
ANALOGOWE UKŁADY SCALONE
ANALOGOWE UKŁADY SCALONE Ćwiczenie to ma na celu zapoznanie z przedstawicielami najważniejszych typów analogowych układów scalonych. Będą to: wzmacniacz operacyjny µa 741, obecnie chyba najbardziej rozpowszechniony
SpedCust 5 instrukcja instalacji
SpedCust 5 instrukcja instalacji jedno- i wielostanowiskowej Schenker Sp. z o.o. Imię i nazwisko Oddział Miejscowość, data INSTRUKCJA INSTALACJI SpedCust5 Aby zainstalować i uruchomić system niezbędne
Politechnika Warszawska Wydział Matematyki i Nauk Informacyjnych ul. Koszykowa 75, 00-662 Warszawa
Zamawiający: Wydział Matematyki i Nauk Informacyjnych Politechniki Warszawskiej 00-662 Warszawa, ul. Koszykowa 75 Przedmiot zamówienia: Produkcja Interaktywnej gry matematycznej Nr postępowania: WMiNI-39/44/AM/13
Rozwiązywanie nazw w sieci. Identyfikowanie komputerów w sieci
Rozwiązywanie nazw w sieci Identyfikowanie komputerów w sieci Protokół TCP/IP identyfikuje komputery źródłowe i docelowe poprzez ich adresy IP. Jednakże użytkownicy łatwiej zapamiętają słowa niż numery.
Wtedy wystarczy wybrać właściwego Taga z listy.
Po wejściu na stronę pucharino.slask.pl musisz się zalogować (Nazwa użytkownika to Twój redakcyjny pseudonim, hasło sam sobie ustalisz podczas procedury rejestracji). Po zalogowaniu pojawi się kilka istotnych
Platforma do obsługi zdalnej edukacji
Andrzej Krzyżak. Platforma do obsługi zdalnej edukacji Projekt platformy e-learningowej wykonanej w ramach pracy magisterskiej obejmował stworzenie w pełni funkcjonalnego, a zarazem prostego i intuicyjnego
elektroniczna Platforma Usług Administracji Publicznej
elektroniczna Platforma Usług Administracji Publicznej A Instrukcja użytkownika Instalacja usług wersja 1.1 Ministerstwo Spraw Wewnętrznych i Administracji ul. Batorego 5, 02-591 Warszawa www.epuap.gov.pl
Archiwum Prac Dyplomowych
Archiwum Prac Dyplomowych Instrukcja dla studentów Ogólna procedura przygotowania pracy do obrony w Archiwum Prac Dyplomowych 1. Student rejestruje pracę w dziekanacie tej jednostki uczelni, w której pisana
Ewidencja abonentów. Kalkulacja opłat
Wachlarz możliwości programu w całości wykorzystywać będą operatorzy o szerokiej strukturze oraz rozbudowanej ofercie. Jednak program został zaprojektowany tak, by umożliwić obsługę zarówno niewielkiej
Poniżej instrukcja użytkowania platformy
Adres dostępowy: http://online.inter-edukacja.wsns.pl/ Poniżej instrukcja użytkowania platformy WYŻSZA SZKOŁA NAUK SPOŁECZNYCH z siedzibą w Lublinie SZKOLENIA PRZEZ INTERNET Instrukcja użytkowania platformy
Praca na wielu bazach danych część 2. (Wersja 8.1)
Praca na wielu bazach danych część 2 (Wersja 8.1) 1 Spis treści 1 Analizy baz danych... 3 1.1 Lista analityczna i okno szczegółów podstawowe informacje dla każdej bazy... 3 1.2 Raporty wykonywane jako
Spis treści. Rozdział 1 ewyniki. mmedica - INSTR UKC JA UŻYTKO W NIKA
Wersja 5.1.9 Spis treści Rozdział 1 1.1 1.1.1 1.1.2 1.2 1.3 1.4 1.5 I Konfiguracja... 1-1 OID świadczeniodawcy... 1-2 Dodanie... instytucji zewnętrznej 1-4 Dodanie... zlecenia 1-11 Pobranie... materiału
Elementy cyfrowe i układy logiczne
Elementy cyfrowe i układy logiczne Wykład Legenda Zezwolenie Dekoder, koder Demultiplekser, multiplekser 2 Operacja zezwolenia Przykład: zamodelować podsystem elektroniczny samochodu do sterowania urządzeniami:
REGULAMIN. przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium Oświaty w Szczecinie.
Załącznik do zarządzenia Nr 96 /2009 Zachodniopomorskiego Kuratora Oświaty w Szczecinie z dnia 23 września 2009 r. REGULAMIN przeprowadzania naboru nowych pracowników do korpusu służby cywilnej w Kuratorium
Oprogramowanie FonTel służy do prezentacji nagranych rozmów oraz zarządzania rejestratorami ( zapoznaj się z rodziną rejestratorów FonTel ).
{tab=opis} Oprogramowanie FonTel służy do prezentacji nagranych rozmów oraz zarządzania rejestratorami ( zapoznaj się z rodziną rejestratorów FonTel ). Aplikacja umożliwia wygodne przeglądanie, wyszukiwanie
WYMAGANIA OFERTOWE. Przetarg nr PZ-451
WYMAGANIA OFERTOWE Przetarg nr PZ-451 dotyczący: Dostosowanie (zabudowa) samochodu Ford Transit Jumbo do potrzeb mobilnego biura obsługi klienta. Warszawa, dn. 10.05.2016 1. Dane Ogólne 1.1. RWE Polska
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
Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia: www.wup.pl/index.php?
1 z 6 2013-10-03 14:58 Adres strony internetowej, na której Zamawiający udostępnia Specyfikację Istotnych Warunków Zamówienia: www.wup.pl/index.php?id=221 Szczecin: Usługa zorganizowania szkolenia specjalistycznego
Rozliczenia z NFZ. Ogólne założenia. Spis treści
Rozliczenia z NFZ Spis treści 1 Ogólne założenia 2 Generacja raportu statystycznego 3 Wczytywanie raportu zwrotnego 4 Szablony rachunków 4.1 Wczytanie szablonów 4.2 Wygenerowanie dokumentów rozliczenia
Zarządzanie projektami. wykład 1 dr inż. Agata Klaus-Rosińska
Zarządzanie projektami wykład 1 dr inż. Agata Klaus-Rosińska 1 DEFINICJA PROJEKTU Zbiór działań podejmowanych dla zrealizowania określonego celu i uzyskania konkretnego, wymiernego rezultatu produkt projektu
2.1 INFORMACJE OGÓLNE O SERII NX
ASTOR KATALOG SYSTEMÓW STEROWANIA HORNER APG 2.1 INFORMACJE OGÓLNE O SERII NX Wyświetlacz graficzny, monochromatyczny o rozmiarach 240 x 128 lub 128 x 64 piksele. 256 kb pamięci programu. 2 porty szeregowe.
Technologie internetowe Internet technologies Forma studiów: Stacjonarne Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W, 2L
Nazwa przedmiotu: Kierunek: Informatyka Rodzaj przedmiotu: moduł specjalności obowiązkowy: Sieci komputerowe Rodzaj zajęć: wykład, laboratorium Technologie internetowe Internet technologies Forma studiów:
INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT
Załącznik nr 1 Siedlce-Warszawa, dn. 16.06.2009 r. Opracowanie: Marek Faderewski (marekf@ipipan.waw.pl) Dariusz Mikułowski (darek@ii3.ap.siedlce.pl) INSTRUKCJA TESTOWANIA USŁUG NA PLATFORMIE ELA-ENT Przed
Tytuł pracy. Praca dyplomowa inżynierska. Filip Piechocki. Tytuł Imię i Nazwisko
Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Informatyki Rok akademicki 2008/2009 Praca dyplomowa inżynierska Filip Piechocki Tytuł pracy Opiekun pracy: Tytuł Imię i Nazwisko
Regulamin serwisu internetowego ramowka.fm
Regulamin serwisu internetowego ramowka.fm Art. 1 DEFINICJE 1. Serwis internetowy serwis informacyjny, będący zbiorem treści o charakterze informacyjnym, funkcjonujący pod adresem: www.ramowka.fm. 2. Administrator
KLAUZULE ARBITRAŻOWE
KLAUZULE ARBITRAŻOWE KLAUZULE arbitrażowe ICC Zalecane jest, aby strony chcące w swych kontraktach zawrzeć odniesienie do arbitrażu ICC, skorzystały ze standardowych klauzul, wskazanych poniżej. Standardowa
REGULAMIN PRZESYŁANIA I UDOSTĘPNIANIA FAKTUR W FORMIE ELEKTRONICZNEJ E-FAKTURA ROZDZIAŁ 1. I. Postanowienia ogólne
Katowickie Wodociągi Spółka Akcyjna ul. Obr.Westerplatte 89 40-335 Katowice Sekretariat: 32 25 54 810 Fax: 32 78 82 503 kancelaria@wodociagi.katowice.pl http://www.wodociagi.katowice.pl/oradnik/efaktura-regulamin.html
System do kontroli i analizy wydawanych posiłków
System do kontroli i analizy wydawanych posiłków K jak KORZYŚCI C jak CEL W odpowiedzi na liczne pytania odnośnie rozwiązania umożliwiającego elektroniczną ewidencję wydawanych posiłków firma PControl
Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST. Pomoc techniczna
NIEZAWODNE ROZWIĄZANIA SYSTEMÓW AUTOMATYKI Tworzenie wielopoziomowych konfiguracji sieci stanowisk asix z separacją segmentów sieci - funkcja POMOST Pomoc techniczna Dok. Nr PLP0009 Wersja: 24-11-2005
Pracownia internetowa w każdej szkole (edycja Jesień 2007)
Instrukcja numer D1/02_03/Z Pracownia internetowa w każdej szkole (edycja Jesień 2007) Opiekun pracowni internetowej cz. 1 (D1) Dostęp do zasobów szkolnego serwera poprzez sieć Internet - zadania Zadanie
INSTRUKCJA RUCHU I EKSPLOATACJI SIECI DYSTRYBUCYJNEJ
INSTRUKCJA RUCHU I EKSPLOATACJI SIECI DYSTRYBUCYJNEJ Część ogólna Tekst obowiązujący od dnia:. SPIS TREŚCI I.A. Postanowienia ogólne... 3 I.B. Podstawy prawne opracowania IRiESD... 3 I.C. Zakres przedmiotowy
PRZEMYSŁOWY ODTWARZACZ PLIKÓW MP3 i WAV
INDUSTRIAL MP3/WAV imp3_wav AUTOMATYKA PRZEMYSŁOWA PRZEMYSŁOWY ODTWARZACZ PLIKÓW MP3 i WAV ZASTOSOWANIE: - systemy powiadamiania głosowego w przemyśle (linie technologiczne, maszyny) - systemy ostrzegania,
Elementy podłączeniowe.
Dziękujemy za wybór Sterboxa. Elementy podłączeniowe. Widoczne gniazdko do podłączenia kabla sieci komputerowej. Na górnej krawędzi gniazdko 12 stykowe, na dolnej 16 stykowe. Do tych gniazd podłącza się
Przekształcenie danych przestrzennych w interaktywne mapy dostępne na stronach www (WARSZTATY, poziom podstawowy)
Wrocławski Instytut Zastosowań Informacji Przestrzennej i Sztucznej Inteligencji Przekształcenie danych przestrzennych w interaktywne mapy dostępne na stronach www (WARSZTATY, poziom podstawowy) Szkolenia
zgubił całą naszą korespondencję Można by tak wymieniać bez bezpieczeństwa, gdyby była wykonana dnia poprzedniego rozwiązałaby niejeden problem.
Zasada działania usługi Business Safe jest prosta. Zainstalowany na Twoim komputerze progra Dlaczego backupować? Któż z nas nie zna smaku tego okropnego uczucia, gdy włączając kompuuter, który jeszcze
Regulamin Projektów Ogólnopolskich i Komitetów Stowarzyszenia ESN Polska
Regulamin Projektów Ogólnopolskich i Komitetów Stowarzyszenia ESN Polska 1 Projekt Ogólnopolski: 1.1. Projekt Ogólnopolski (dalej Projekt ) to przedsięwzięcie Stowarzyszenia podjęte w celu realizacji celów
Adapter USB do CB32. MDH-SYSTEM ul. Bajkowa 5, Lublin tel./fax.81-444-62-85 lub kom.693-865-235 e mail: info@mdh-system.pl
MDH System Strona 1 MDH-SYSTEM ul. Bajkowa 5, Lublin tel./fax.81-444-62-85 lub kom.693-865-235 e mail: info@mdh-system.pl Adapter USB do CB32 Produkt z kategorii: Elmes Cena: 42.00 zł z VAT (34.15 zł netto)
Konfiguracja przeglądarek internetowych oraz Panelu Java dla klientów instutucjonalnych problemy z apletem do logowania/autoryzacji
Konfiguracja przeglądarek internetowych oraz Panelu Java dla klientów instutucjonalnych problemy z apletem do logowania/autoryzacji Rozdział 1 Przeglądarka internetowa Internet Explorer (32-bit)... 2 Rozdział
Linux LAMP, czyli Apache, Php i MySQL
Linux LAMP, czyli Apache, Php i MySQL LAMP jest to po prostu serwer stron www, pracujący na Linux-ie z zainstalowanym apache, językiem php oraz bazą danych MySQL. System ten stosuje ogromna większość hostingów
INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56
INSTRUKCJA DO PROGRAMU LICZARKA 2000 v 2.56 Program Liczarka 2000 służy do archiwizowania i drukowania rozliczeń z przeprowadzonych transakcji pieniężnych. INSTALACJA PROGRAMU Program instalujemy na komputerze
Załącznik nr 8. Warunki i obsługa gwarancyjna
Załącznik nr 8 Warunki i obsługa gwarancyjna 1. Definicje. Dla potrzeb określenia zakresów Usług gwarancyjnych, przyjmuje się że określenia podane poniżej, będą miały następujące znaczenie: Usterka Zdarzenie,
Instrukcja obsługi. Oprogramowanie SAS 31
Instrukcja obsługi Oprogramowanie SS 31 Oprogramowanie SS 31 Spis treści 1. MINIMLNE WYMGNI SPRZĘTOWE I PROGRMOWE KOMPUTER PC... 3 2. INSTLCJ PROGRMU SYLCOM DL WINDOWS... 3 3. IMPORTOWNIE PLIKÓW URZĄDZEŃ...
Elementy animacji sterowanie manipulatorem
Elementy animacji sterowanie manipulatorem 1 Cel zadania Wykształcenie umiejętności korzystania z zapisu modelu aplikacji w UML oraz definiowania właściwego interfejsu klasy. 2 Opis zadania Należy napisać
MUltimedia internet Instrukcja Instalacji
MUltimedia internet Instrukcja Instalacji MUltimedia internet Instrukcja Instalacji 1 2 MULTIMEDIA Internet 1. Zestaw instalacyjny 4 2. Budowa modemu ADSL 5 3. Podłączenie modemu ADSL 7 4. Konfiguracja
Seria P-662HW-Dx. Bezprzewodowy modem ADSL2+ z routerem. Skrócona instrukcja obsługi
Bezprzewodowy modem ADSL2+ z routerem Skrócona instrukcja obsługi Wersja 3.40 Edycja 1 3/2006 Informacje ogólne Posługując się dołączoną płytą CD lub postępując zgodnie ze wskazówkami w tej Skróconej instrukcji
Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD
Oprogramowanie klawiatury matrycowej i alfanumerycznego wyświetlacza LCD 1. Wprowadzenie DuŜa grupa sterowników mikroprocesorowych wymaga obsługi przycisków, które umoŝliwiają uŝytkownikowi uruchamianie
Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy)
Instrukcja obsługi platformy zakupowej e-osaa (klient podstawowy) 1. Wejście na stronę http://www.officemedia.com.pl strona główną Office Media 2. Logowanie do zakupowej części serwisu. Login i hasło należy
Konfiguracja OpenVPN
Konfiguracja OpenVPN Przed rozpoczęciem konfiguracji należy podjąć decyzję w jakim trybie program ma utworzyć tunel. Zasadniczo umożliwia on połączenie zdalnych lokalizacji w warstwie drugiej lub trzeciej
Obowiązuje od 30 marca 2015 roku
Obowiązuje od 30 marca 2015 roku W Regulaminie świadczenia usługi Pocztex w obrocie krajowym, stanowiącym Załącznik nr 1 do Decyzji Nr 326/2013/PRUP Dyrektora Zarządzającego Pionem Rozwoju Usług Pocztowych
Konfigurator opisuje proces instalacji i konfiguracji karty sieciowej bezprzewodowej D-Link DWL-520+ w systemach /2000/XP /
KONFIGURATOR Konfigurator opisuje proces instalacji i konfiguracji karty sieciowej bezprzewodowej D-Link DWL-520+ w systemach /2000/XP / 1. Instalowanie sterowników karty sieciowej. Podczas pierwszej instalacji
Specyfikacja usługi CCIE R&S
Schemat laba CCIE R&S Specyfikacja usługi CCIE R&S Connections between router and switches Ethernet S1 R1 Local Local Fa0/1 R1 Ga0/0 Ga0/0 S1 Fa0/1 Fa0/2 R2 Ga0/0 Ga0/1 S2 Fa0/1 Fa0/3 R4 Fa0/0 Ga0/2 S4
Instalacja. Zawartość. Wyszukiwarka. Instalacja... 1. Konfiguracja... 2. Uruchomienie i praca z raportem... 4. Metody wyszukiwania...
Zawartość Instalacja... 1 Konfiguracja... 2 Uruchomienie i praca z raportem... 4 Metody wyszukiwania... 6 Prezentacja wyników... 7 Wycenianie... 9 Wstęp Narzędzie ściśle współpracujące z raportem: Moduł
Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS
Logowanie do mobilnego systemu CUI i autoryzacja kodami SMS Dostęp do strony logowania następuje poprzez naciśnięcie odpowiedniego dla rodzaju usługi linku dostępnego na stronie www.bsjaroslaw.pl.: lub
Projektowanie bazy danych
Projektowanie bazy danych Pierwszą fazą tworzenia projektu bazy danych jest postawienie definicji celu, założeo wstępnych i określenie podstawowych funkcji aplikacji. Każda baza danych jest projektowana
Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska
Załącznik nr 1 do Lokalnej Strategii Rozwoju na lata 2008-2015 Regulamin Obrad Walnego Zebrania Członków Stowarzyszenia Lokalna Grupa Działania Ziemia Bielska Przepisy ogólne 1 1. Walne Zebranie Członków