Podstawowe typy serwerów
|
|
- Wacław Kruk
- 6 lat temu
- Przeglądów:
Transkrypt
1 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. 4. Serwery współbieżne serwery połączeniowe, usuwanie zakończonych procesów, serwery bezpołączeniowe, 5. Jednoprocesowe serwery współbieżne. koncepcja i implementacja. 1
2 Algorytm serwera 1. Utworzenie gniazda powiązanego z odpowiednim portem, pod którym będą przyjmowane zgłoszenia. 2. Przyjęcie zgłoszenia od klienta. 3. Obsługa zgłoszenia. przetwarzanie danych, sformatowanie i wysłanie odpowiedzi. 4. Powrót do punktu 2. 2
3 Serwery współbieżne i iteracyjne Serwer iteracyjny obsługuje zgłoszenia sekwencyjnie. Jest łatwiejszy do zaprojektowania i konserwacji, jednak średni czas obsługi klienta może być długi ze względu na oczekiwanie przed rozpoczęciem obsługi zgłoszenia. Serwer współbieżny może obsługiwać kilka zgłoszeń równocześnie. Zwykle zapewnia krótszy czas obsługi ale jest trudniejszy do zaprojektowania niż serwer iteracyjny. Termin serwer współbieżny jest używany niezależnie od tego, czy implementacja jest oparta na współbieżnie działających procesach czy też nie. 3
4 Serwery połączeniowe i bezpołączeniowe Nawiązywanie logicznego połączenia zależy od protokołu warstwy transportowej, z którego korzysta klient, aby uzyskać dostęp do serwera. Serwer używający protokołu TCP jest serwerem połączeniowym, natomiast serwer używający protokołu UDP jest serwerem bezpołączeniowym. Przy projektowaniu serwera trzeba pamiętać o tym, że protokół wykorzystywany przez warstwę aplikacji (zastosowań) może dodatkowo narzucać różne ograniczenia dla protokołu warstwy transportowej. 4
5 Serwery połączeniowe Serwer przyjmuje od klienta zgłoszenie połączenia i po jego nawiązaniu używa tego połączenia do komunikacji z klientem, który je zainicjował. Po zakończeniu interakcji połączenie jest zamykane. Podstawowe zalety: niezawodność transmisji danych zapewniana przez protokół transportowy (TCP), łatwość zaprojektowania i implementacji. Podstawowe wady: oddzielne gniazdo dla każdego połączenia (zasoby systemowe), wrażliwość na awarie programów klienckich. 5
6 Serwery bezpołączeniowe Komunikacja pomiędzy klientem i serwerem odbywa się bez nawiązywania połączenia (UDP). Podstawowe zalety: mniejsze ryzyko wyczerpania zasobów serwera, wydajna transmisja danych, możliwość pracy w trybie rozgłoszeniowym. Podstawowe wady: konieczność zapewnienia odpowiedniego poziomu niezawodności transmisji wymaganej przez aplikacje wbudowanie zabezpieczeń w protokół warstwy aplikacji, problemy przy przenoszeniu aplikacji z sieci lokalnej do sieci rozległej. 6
7 Serwery bezstanowe i wielostanowe Serwery rejestrujące informację o stanie interakcji z klientami nazywamy serwerami wielostanowymi, natomiast te które nie przechowują takiej informacji, bezstanowymi. Zagadnienie bezstanowości serwerów musi być rozważane m. in. w związku z problemem zapewnienia niezawodności transmisji (UDP), jak również w zależności od używanego protokołu aplikacyjnego: serwery bezstanowe: ECHO, TIME, serwery wielostanowe: POP, IMAP, SMTP. 7
8 Optymalizacja serwerów bezstanowych Optymalizacja serwera bezstanowego wymaga wielkiej ostrożności, ponieważ przechowywanie nawet niewielkiej ilości informacji o stanie interakcji może doprowadzić do wyczerpania zasobów w razie częstych awarii i wznowień programów klienckich lub w razie błędów transmisji, polegających na powielaniu komunikatów albo dostarczaniu ich z opóźnieniem. 8
9 Podstawowe typy serwerów Można wyróżnić cztery podstawowe typy serwerów: iteracyjne bezpołączeniowe, iteracyjne połączeniowe, współbieżne bezpołączeniowe, współbieżne połączeniowe. Ocena działania serwera: czas przetwarzania zgłoszenia, obserwowany czas odpowiedzi. 9
10 Problem zakleszczenia serwera Niepoprawnie działający klient może spowodować zakleszczenie serwera jednoprocesowego, jeśli serwer używa funkcji systemowych, których wykorzystanie może zablokować proces serwera w trakcie wysyłania lub odbierania danych od klienta (np. funkcje read() lub write()). Podatność na zakleszczenie jest poważną wadą serwera, ponieważ oznacza, że określone zachowanie jednego klienta może uniemożliwić serwerowi obsługę innych klientów. 10
11 Iteracyjny serwer połączeniowy Schemat struktury iteracyjnego serwera połączeniowego. proces serwera połączeniowego gniazdo pierwotne gniazdo Gniazdo pierwotne jest związane z powszechnie znanym portem odpowiadającym realizowanej przez serwer usłudze. Za jego pośrednictwem proces serwera oczekuje na połączenia klientów. Po nawiązaniu połączenia tworzone jest osobne gniazdo przeznaczone do komunikacji z klientem. 11
12 Iteracyjny serwer połączeniowy Zwykle najprostszy w implementacji jest algorytm iteracyjnego serwera połączeniowego. 1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem odpowiadającym usłudze udostępnionej przez serwer. 2. Ustaw bierny tryb pracy gniazda. 3. Przyjmij zgłoszenie połączenia nadesłane na adres gniazda. Uzyskaj nowe gniazdo do obsługi tego połączenia. 4. Odpowiadaj na komunikaty klienta zgodnie z obsługiwanym protokołem. 5. Po zakończeniu obsługi zamknij połączenie i wróć do kroku 3. 12
13 Powiązanie gniazda z usługą Do powiązania gniazda z określoną usługą służy funkcja bind() zadeklarowana w pliku sys/socket.h: int bind(int s, const struct sockaddr *address, int len); gdzie: s deskryptor gniazda zwrócony przez funkcję socket(), address wskaźnik do struktury zawierającej adres internetowy klienta. W przypadku programu serwera zwykle address wskazuje na tzw. adres wieloznaczny zdefiniowany stałą INADDR_ANY, len rozmiar struktury wskazywanej przez address. Wartość zwracana: 0 w przypadku powodzenia, -1 w przypadku błędu ustawiana zmienna errno. 13
14 Tryb bierny gniazda Do ustawienia gniazda w tryb bierny służy funkcja listen() zadeklarowana w pliku sys/socket.h: int listen(int s, int qlen); gdzie: s deskryptor gniazda związanego z usługą, qlen długość wewnętrznej kolejki zgłoszeń związanej z gniazdem maksymalnie SOMAXCONN, Wartość zwracana: 0 w przypadku powodzenia, -1 w przypadku błędu ustawiana zmienna errno. 14
15 Utworzenie biernego gniazda #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <netdb.h> #include <stdio.h> #include <errno.h> int passivesock(char *service, char *protocol, int qlen){ struct servent *pse; struct protoent *ppe; struct sockaddr_in sin; int type, s; 15
16 Utworzenie biernego gniazda bzero((char*) &sin, sizeof(sin)); sin.sin_family = AF_INET; sin.sin_addr.s_addr = INADDR_ANY; if (pse = getservbyname(service, protocol)){ sin.sin_port = pse->s_port; else if ((sin.sin_port = htons((u_short)atoi(service)))==0){ fprintf(stderr, "getservbyname: %s\n", strerror(errno)); return -1; if ((ppe = getprotobyname(protocol))==null){ fprintf(stderr, "getprotobyname: %s\n", strerror(errno)); return -1; if (strcmp(protocol, "udp")==0){ type = SOCK_DGRAM; else{ type = SOCK_STREAM; 16
17 Utworzenie biernego gniazda if ((s = socket(pf_inet, type, ppe->p_proto))<0){ fprintf(stderr, "socket: %s\n", strerror(errno)); return -1; if(bind(s, (struct sockaddr *)&sin, sizeof(sin))<0){ fprintf(stderr, "bind: %s\n", strerror(errno)); return -1; if (type==sock_stream && listen(s, qlen)<0){ fprintf(stderr, "listen: %s\n", strerror(errno)); return -1; return s; 17
18 Przyjmowanie połączeń Do przyjmowania zgłoszenia połączenia służy funkcja accept() zadeklarowana w pliku sys/socket.h: int accept(int s, struct sockaddr *address, int *len); gdzie: s deskryptor gniazda dla którego wywołano funkcje bind() i listen(), address wskaźnik do struktury, w którą zostaną wpisane dane o adresie klienta. len wskaźnik do zmiennej określającej rozmiar struktury *address. Wartość zwracana: deskryptor gniazda utworzonego w celu obsługi połączenia lub -1 w przypadku błędu ustawiana zmienna errno. 18
19 Obsługa połączenia Po zaakceptowaniu połączenia transmisja danych odbywa się z wykorzystaniem funkcji read() i write(). Po zakończeniu wymiany danych deskryptor przyznanego przez accept() gniazda powinien zostać zwolniony za pomocą funkcji close(). 19
20 Iteracyjny serwer połączeniowy Serwer usługi ECHO: Stałe LINELEN i TESTPORT powinny być zdefiniowane w programie głównym. int svr_echo_tcp(){ int s1, s2, alen; struct sockaddr_in sin; alen = sizeof(sin); if((s1=passivesock(testport, "tcp", 10))<0){ fprintf(stderr, "passivesock: %s\n", strerror(errno)); return -1; printf("tcp echo serwer uruchomiony\n"); 20
21 Iteracyjny serwer połączeniowy while(1){ if((s2=accept(s1, (struct sockaddr *)&sin, &alen))<0){ fprintf(stderr, "accept: %s\n", strerror(errno)); return -1; echod(s2); if (close(s2)<0){ fprintf(stderr, "close: %s\n", strerror(errno)); return -1; 21
22 Iteracyjny serwer połączeniowy Funkcja echod() obsługuje komunikację z klientem. int echod(int s){ char buf[linelen+1]; int n; while(n=read(s, buf, LINELEN)){ if (n<0){ fprintf(stderr, "read: %s\n", strerror(errno)); return -1; if (write(s, buf, n)<0){ fprintf(stderr, "write: %s\n", strerror(errno)); return -1; buf[n] = '\0'; printf("%s", buf); return 1; 22
23 Zakleszczenia Zaprezentowany serwer iteracyjny jest wrażliwy na na niepoprawne działanie klientów. Program serwera zawiera instrukcje, które mogą prowadzić do zakleszczenia: read() - wstrzymuje działanie programu do czasu odebrania danych, lub osiągnięcia,,końca pliku. W przypadku gdy klient nie wyśle danych ani nie zamknie połączenia serwer zatrzyma się. Podobny scenariusz może mieć miejsce w instrukcji close(). write() - wstrzymuje działanie programy do czasu przekazania wysyłanych danych do protokołu warstwy transportowej (TCP). Jeśli serwer będzie generował nowe komunikaty a klient nie będzie ich odbierał, to po pewnym czasie bufory TCP po obu stronach zostaną wypełnione. Kolejna instrukcja write() zatrzyma serwer. 23
24 Iteracyjny serwer połączeniowy import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.net.serversocket; import java.net.socket; public class EchoTCPServer { public static void main(string args[]){ Socket s; OutputStream os; InputStream is; byte[] buffer = new byte[100]; int i; 24
25 Iteracyjny serwer połączeniowy try { ServerSocket ss = new ServerSocket(TESTPORT); while(true){ s = ss.accept(); is = s.getinputstream(); os = s.getoutputstream(); while (true){ if ((i = is.read(buffer))<0){ break; os.write(buffer, 0, i); s.close(); catch (IOException e) { e.printstacktrace(); 25
26 Itewracyjny serwer bezpołączeniowy Schemat struktury iteracyjnego serwera bezpołączeniowego. proces serwera bezpołączeniowego gniazdo Jeden proces serwera komunikuje się kolejno z wieloma klientami przez jedno gniazdo. Gniazdo to jest związane z powszechnie znanym portem odpowiadającym realizowanej przez serwer usłudze. 26
27 Iteracyjny serwer bezpołączeniowy Iteracyjne serwery bezpołączeniowe są używane do zadań, w których czas przetwarzania danych jest krótki. Transport bezpołączeniowy pozwala też na efektywne przesyłanie niewielkiej ilości danych. 1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem odpowiadającym usłudze udostępnionej przez serwer. 2. Odpowiadaj na kolejne komunikaty otrzymywane od klientów zgodnie z obsługiwanym protokołem. 27
28 Adresowanie odpowiedzi W przypadku serwerów bezpołączeniowych do komunikacji nie można używać funkcji read() i write(), ponieważ ograniczają one możliwość wymiany datagramów przez gniazdo do komunikacji z jednym komputerem i jednym portem na tym komputerze. Co więcej bez nawiązania połączenia funkcją connect() nie ma zdefiniowanego żadnego adresu docelowego do transmisji przez utworzone wcześniej gniazdo. Problem można rozwiązać używając funkcji recvfrom() i sendto(). 28
29 Odbieranie danych Do obierania danych od klientów w serwerach bezpołączeniowych używa się funkcji recvfrom() zdeklarowaną w pliku sys/socket.h. int recvfrom(int s, char *buffer, int blen, int flags, struct sockaddr *address, int *alen); s deskryptor gniazda, buffer wskaźnik do bufora o długości blen, w którym zostaną umieszczone odebrane dane, flags parametr kontrolujący odbiór wiadomości. Może składać się z MSG_PEEK, MSG_OOB, MSG_WAITALL. Zwykle używa się wartości 0, address wskaźnik do struktury o rozmiarze *alen, w którą zostaną wpisane dane o adresie klienta. Wartość zwracana: długość wiadomości lub -1 w przypadku błędu (errno). 29
30 Wysyłanie danych Do wysyłania danych do klientów w serwerach bezpołączeniowych używa się funkcji sendto() zdeklarowaną w pliku sys/socket.h. int sendto(int s, char *buffer, int blen, int flags, struct sockaddr *address, int alen); s deskryptor gniazda, buffer wskaźnik do bufora z danymi do wysłania, blen - rozmiar komunikatu, flags parametr kontrolujący wysyłanie danych. Może składać się z MSG_OOB, MSG_DONTROUTE. Zwykle używa się wartości 0, address wskaźnik do struktury o rozmiarze alen, określającą adresata wiadomości. Wartość zwracana: liczba wysłanych bajtów lub -1 w przypadku błędu (errno). 30
31 Iteracyjny serwer bezpołączeniowy int svr_echo_udp(){ int s, alen; struct sockaddr_in sin; char buf[linelen+1]; alen = sizeof(sin); if ((s=passivesock(testport, "udp", 0))<0){ fprintf(stderr, "passivesock: %s\n", strerror(errno)); return -1; printf("udp echo serwer uruchomiony\n"); 31
32 Iteracyjny serwer bezpołączeniowy while(1){ if (recvfrom(s, buf, sizeof(buf), 0, (struct sockaddr *)&sin, &alen)<0){ fprintf(stderr, "recvfrom: %s\n", strerror(errno)); return -1; if (sendto(s, buf, strlen(buf)+1, 0, (struct sockaddr *)&sin, sizeof(sin))<0){ fprintf(stderr, "sendto: %s\n", strerror(errno)); return -1; printf("odeslalem: %s\n", buf); Serwer działa w nieskończonej pętli realizując kolejne żądania klientów. Do kontaktów z wszystkimi klientami jest używane jedno gniazdo. 32
33 Serwer współbieżny Zasadniczym powodem stosowania mechanizmu współbieżności w serwerach jest potrzeba zapewnienia krótkiego czasu odpowiedzi w warunkach obsługi wielu klientów. Współbieżność skraca obserwowany czas odpowiedzi gdy: przygotowanie odpowiedzi wymaga czasochłonnych operacji wejścia wyjścia, występują znaczne różnice czasu przetwarzania dla różnych zgłoszeń, serwer działa na komputerze wieloprocesorowym. Wyższa wydajność jest uzyskiwana zwykle przez zrównoleglenie przetwarzania danych z operacjami wejścia wyjścia. 33
34 Serwer współbieżny połączeniowy Proces główny: 1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem odpowiadającym usłudze udostępnionej przez serwer bind(). 2. Ustaw bierny tryb pracy gniazda listen(). 3. Przyjmij zgłoszenie połączenia nadesłane na adres gniazda - accept(). Utwórz nowy proces podporządkowany fork() odpowiedzialny za obsługę tego połączenia. 4. Wróć do kroku 3. 34
35 Serwer współbieżny połączeniowy Proces podporządkowany: 1. Przejmij od procesu głównego nawiązane połączenie. 2. Korzystając z otrzymanego gniazda prowadź interakcję z klientem zgodnie z protokołem warstwy aplikacji read(), write(). 3. Zwolnij gniazdo close() i zakończ działanie exit(). Współbieżność w działaniu serwerów typu połączeniowego polega na zrównolegleniu obsługi wielu połączeń, a nie poszczególnych zapytań. 35
36 Serwer współbieżny połączeniowy Schemat struktury współbieżnego serwera połączeniowego. proces główny gniazdo pierwotne proces potomny 1 proces potomny 2... proces potomny n gniazdo gniazdo gniazdo Proces główny przyjmuje zgłoszenia połączeń. Do obsługi każdego połączenia tworzony jest proces podporządkowany. 36
37 Usuwanie procesów po ich zakończeniu Procesy potomne po obsłużeniu klienta kończą pracę. W systemach UNIX powinny one dodatkowo zostać zakończone przez proces macierzysty. W przeciwnym razie będą nadal egzystować w systemie. W chwili zakończenia procesu potomnego proces macierzysty otrzymuje sygnał SIGCHILD. Dzięki temu może on zakończyć proces potomny używając instrukcji signal(sigchild, gc); gdzie gc jest wskaźnikiem do przykładowej funkcji: void gc(int i){ while(waitpid(-1, NULL, WNOHANG)<=0) ; 37
38 Serwer współbieżny połączeniowy svr_con_echo_tcp(){ int s1, s2, alen; struct sockaddr_in sin; if((s1=passivesock(testport, "tcp", 10))<0){ fprintf(stderr, "passivesock: %s\n", strerror(errno)); return -1; signal(sigchld, gc); while(1){ alen = sizeof(sin); if((s2=accept(s1, (struct sockaddr *)&sin, &alen))<0){ if(errno==eintr){ continue; fprintf(stderr, "accept: %s\n", strerror(errno)); return -1; 38
39 Serwer współbieżny połączeniowy switch(fork()){ case 0: // proces potomny close(s1); echod(s2); if (close(s2)<0){ fprintf(stderr, "close: %s\n", strerror(errno)); return -1; exit(1); default: // proces macierzysty close(s2); break; case -1: fprintf(stderr, "fork: %s\n", strerror(errno)); return -1; // switch 39
40 Serwer współbieżny połączeniowy Współbieżne serwery połączeniowe jednocześnie komunikują się z wieloma klientami. W zaprezentowanym przykładzie proces główny tworzy nowy proces podporządkowany dla każdego zgłoszonego połączenia. Proces potomny obsługuje klienta po czym zamyka połączenie i kończy działanie. Proces główny bezpośrednio nie kontaktuje się z klientami. 40
41 Serwer współbieżny bezpołączeniowy Proces główny 1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem odpowiadającym usłudze udostępnionej przez serwer - bind(). 2. Ustaw bierny tryb pracy gniazda - listen(). 3. Odbierz kolejne zapytanie od klientów - recvfrom(). Utwórz nowy proces podporządkowany fork(), który przygotuje odpowiedź. 4. Przejdź do punktu 3. 41
42 Serwer współbieżny bezpołączeniowy Proces podporządkowany: 1. Przejmij od procesu głównego dostęp do gniazda. 2. Skonstruuj odpowiedź zgodnie z używanym protokołem i wyślij ją do klienta sendto(). 3. Zakończ działanie exit(). Z powodu znacznego kosztu operacji tworzenia nowego procesu istnieje niewiele współbieżnych realizacji serwerów bezpołączeniowych. 42
43 Serwer współbieżny bezpołączeniowy import java.io.ioexception; import java.net.datagrampacket; import java.net.datagramsocket; import java.net.inetaddress; public class EchoConcurentUDPServer { private static final int LINELEN = 100; public static void main(string[] args) { if (args.length<1){ System.out.println( "wywolanie java EchoConcurentUDPServer port"); return; DatagramPacket p; DatagramSocket s=null; 43
44 Serwer współbieżny bezpołączeniowy try { s = new DatagramSocket(Integer.parseInt(args[0])); while(true){ p = new DatagramPacket(new byte[linelen], LINELEN); s.receive(p); Thread t = new Thread(new Worker(s,p)); t.start(); System.out.println("otrzymano :" + new String(p.getData(), 0, p.getlength())); catch (Exception e) { e.printstacktrace(); finally { if (s!=null){ s.close(); 44
45 Serwer współbieżny bezpołączeniowy private static class Worker implements Runnable{ private DatagramPacket request; private DatagramSocket socket; /** * Konstruktor ds gniazdo uzywane do transmisji dp pakiet zawierający żądanie obsługi */ public Worker(DatagramSocket ds, DatagramPacket dp){ this.socket = ds; this.request = dp; 45
46 Serwer współbieżny bezpołączeniowy public void run() { byte[] ba = this.request.getdata(); int length = this.request.getlength(); InetAddress ia = this.request.getaddress(); int port = this.request.getport(); DatagramPacket response = new DatagramPacket(ba, 0, length, ia, port); try { this.socket.send(response); System.out.println("wyslano :" + new String(response.getData(), 0, response.getlength())); catch (IOException e) { e.printstacktrace(); 46
47 Pozorna współbieżność w jednym procesie 1. Utwórz gniazdo i zwiąż je z powszechnie znanym adresem odpowiadającym usłudze udostępnionej przez serwer bind() oraz listen(). 2. Czekaj na zdarzenia dotyczące istniejących gniazd. 3. W razie gotowości pierwotnie utworzonego gniazda przyjmij zgłoszenie połączenia nadesłane na adres gniazda - accept(). Dodaj nowe gniazdo do listy obsługiwanych gniazd. 4. W razie gotowości innego gniazda używaj funkcji read() oraz write() w celu komunikacji z wcześniej połączonym klientem. 5. Wróć do punktu 2. 47
48 Pozorna współbieżność w jednym procesie Pozorna współbieżność może być stosowana jeśli: korzyści z rzeczywistej współbieżności są mniejsze niż koszt tworzenia nowego procesu, kilka połączeń jest obsługiwane z wykorzystaniem wspólnego zbioru danych, dane są przekazywane pomiędzy niezależnymi połączeniami. Przykład: X-Windows. 48
49 Jednoprocesowe serwery współbieżne Schemat struktury współbieżnego serwera połączeniowego. proces główny gniazdo pierwotne gniazdo gniazdo... gniazdo Proces główny przyjmuje zgłoszenia połączeń; do obsługi każdego połączenia tworzony wykorzystywane jest osobne gniazdo. 49
50 Sprawdzenie stanu gniazd W celu wybrania gniazda, do którego przyszedł komunikat można użyć funkcji select() zadeklarowanej w pliku unistd.h: int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); readfds, writefds, exceptfds zbiory obserwowanych deskryptorów ze względu na gotowość do odczytu, zapisu oraz wystąpienia wyjątków. Po wykonaniu funkcji wskaźniki zostaną wypełnione zbiorami deskryptorów, dla których zaszło odpowiednie zdarzenie. n największy deskryptor ze wszystkich trzech zbiorów plus 1. timeout maksymalny czas oczekiwania na powrót z funkcji. 0 powrót natychmiastowy, NULL potencjalnie nieskończony czas oczekiwania. Zwraca: liczbę znalezionych deskryptorów lub -1 w przypadku błędu. 50
51 Sprawdzanie stanu gniazd W pliku sys/types.h zdefiniowano cztery makra przeznaczone do operowania na zbiorach deskryptorów: FD_ZERO(fd_set *set) usuwa wszystkie deskryptory ze zbioru *set, FD_SET(int fd, fd_set *set) dodaje deskryptor fd do zbioru *set, FD_CRL(int fd, fd_set *set) usuwa deskryptor fd ze zbioru *set, FD_ISSET(int fd, fd_set *set) sprawdza, czy deskryptor fd znajduje się w zbiorze *set. Zwykle używane po wykonaniu funkcji select(). 51
52 Przykład: C svr_pseudocon_echo_tcp(){ int s0, s, maxs, alen; struct sockaddr_in sin; fd_set afds, //zbiór aktywnych deskryptorów rdfs; //zbiór znalezionych deskryptorów w funkcji select() if((s0=passivesock(testport, "tcp", 10))<0){ fprintf(stderr, "passivesock: %s\n", strerror(errno)); return -1; maxs = s0; FD_ZERO(&afds); FD_SET(s0, &afds); 52
53 Przykład: C while(1){ bcopy((char *)&afds, (char *)&rdfs, sizeof(afds)); if (select(maxs+1, &rdfs, NULL, NULL, 0)<0){ fprintf(stderr, "select: %s\n", strerror(errno)); return -1; if (FD_ISSET(s0, &rdfs)){ //nowe połączenie alen = sizeof(sin); if((s=accept(s0, (struct sockaddr *)&sin, &alen))<0){ fprintf(stderr, "accept: %s\n", strerror(errno)); return -1; FD_SET(s, &afds); if (s>maxs) maxs = s; // if 53
54 Przykład: C for (s=0; s<=maxs; s++){ // nawiązane połączenia if(s!=s0 && FD_ISSET(s, &rdfs)){ echod(s); if (close(s)<0){ fprintf(stderr, "close: %s\n", strerror(errno)); return -1; FD_CLR(s, &afds); //for //while 54
55 Przykład: Java import java.io.ioexception; import java.io.inputstream; import java.io.outputstream; import java.net.serversocket; import java.net.socket; import java.net.sockettimeoutexception; import java.util.enumeration; import java.util.vector; public class EchoPseudoConcurentTCPServer { private static final int LINELEN = 100; public static void main(string args[]){ Socket s; OutputStream os; InputStream is; int i; if (args.length<1){ System.out.println("wywolanie java EchoPseudoConcurentTCPServer port"); return; 55
56 Przykład: Java byte[] buffer = new byte[linelen]; Vector v = new Vector(); Enumeration e; try { ServerSocket ss = new ServerSocket( Integer.parseInt(args[0])); ss.setsotimeout(1); v.clear(); while(true){ try{ s = ss.accept(); catch (SocketTimeoutException ex){ s = null; if (s!=null){ s.setsotimeout(1); v.add(s); 56
57 Przykład: Java for(e=v.elements(); e.hasmoreelements(); ){ s = (Socket)e.nextElement(); is = s.getinputstream(); os = s.getoutputstream(); try{ i = is.read(buffer); catch(sockettimeoutexception ex){ continue; if (i>0){ os.write(buffer, 0, i); System.out.println("wyslano :" + new String(buffer, 0, i)); catch (IOException ex) { ex.printstacktrace(); 57
58 Jednoprocesowe serwery współbieżne Serwery jednoprocesowy wykonuje wszystkie zadania zarówno procesu głównego jak i procesów podporządkowanych serwera wieloprocesowego. Po zgłoszeniu gotowości przez gniazdo główne, serwer nawiązuje nowe połączenie. Gdy jest gotowe do obsługi którekolwiek z pozostałych gniazd, serwer czyta zapytanie nadesłane przez klienta i odsyła odpowiedź. 58
59 Porównanie serwerów Serwer iteracyjny czy współbieżny. iteracyjny - prostszy do zaprogramowania i konserwacji, współbieżny krótszy czas oczekiwania na odpowiedź. Współbieżność rzeczywista czy pozorna. rzeczywista połączenia obsługiwane niezależnie, pozorna niezależne połączenia korzystają lub wymieniają wspólne dane. Serwer bezpołączeniowy czy połączeniowy. bezpołączeniowy sieć lokalna, małe prawdopodobieństwo błędów transmisji, połączeniowy wszystkie pozostałe zastosowania. 59
60 Podsumowanie W ramach wykładu zostały zaprezentowane przykładowe implementacje podstawowych, omawianych wcześniej typów serwerów, z wykorzystaniem mechanizmów dostępnych w systemach UNIX. Serwery iteracyjne są zwykle prostsze do implementacji jednak nie zapewniają szybkiej reakcji serwera w przypadku dużego obciążenia. W takim przypadku często lepiej zaprojektować i zaimplementować serwer współbieżny. Serwery bezpołączeniowe są dosyć odporne na różne awarie sieci. W przypadku serwerów połączeniowych dodatkowo mogą wystąpić problemy związane z zakleszczeniami. Ważne funkcje: bind(), listen(), accept(), recvfrom(), sendto(), select(). 60
Serwer współbieżny połączeniowy
Serwery współbieżne 1. Serwery współbieżne serwery połączeniowe, usuwanie zakończonych procesów, serwery bezpołączeniowe, 2. Jednoprocesowe serwery współbieżne. koncepcja i implementacja. 1 Serwer współbieżny
Bardziej szczegół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ółowoSerwery współbieżne c.d.
Serwery współbieżne c.d. 1. Serwery wielousługowe i wieloprotokołowe. 2. Sterowanie współbieżnością w serwerze współbieżność sterowana zapotrzebowaniem, alokacja wstępna procesów podporządkowanych. 3.
Bardziej szczegółowoIteracyjny serwer TCP i aplikacja UDP
Iteracyjny serwer TCP i aplikacja UDP Iteracyjny serwer TCP Funkcje wywoływane przez serwer TCP socket() - bind() - listen() - accept() - read() / write() - close() socket() Creates an endpoint for communication
Bardziej szczegółowoLiteratura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998
Gniazda BSD Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998 socket() Użycie gniazd w transmisji połączeniowej bind() listen() socket() accept()
Bardziej szczegółowoGniazda BSD. komunikacja bezpołączeniowa
Gniazda BSD komunikacja bezpołączeniowa Użycie gniazd w transmisji bezpołączeniowej socket() socket() bind() bind() STOP! recv() żądanie send() send() odpowiedź recv() STOP! recvfrom() #include
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ół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ółowoGniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP
Gniazda UDP Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź, 3 kwietnia 2006 Wstęp ZewzględunaróżnicewprotokołachTCPiUDPsposób korzystania z gniazd UDP różni sie znacznie od
Bardziej szczegółowoProgramowanie z wykorzystaniem gniazd
Plan wykładu 1. Programowanie z wykorzystaniem gniazd usługa TIME, usługa ECHO, 2. Popularne aplikacje TCP/IP poczta elektroniczna cz. 1 protokół SMTP, 1 Programowanie z wykorzystaniem gniazd Utworzenie
Bardziej szczegółowoModel OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna
1 Plan wykładu 1. Model ISO/OSI warstwy modelu OSI transmisja w modelu OSI 2. Model TCP/IP protokół UDP protokół TCP 3. Połączenie i rozłączenie w TCP 4. Programowanie z wykorzystaniem gniazd. 2 Model
Bardziej szczegółowoPrzykł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ółowoSchemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...
Schemat dla UDP = możliwe zablokowanie aplikacji KLIENT s=socket(...) [bind(s,...)] sendto(s,...) recvfrom(s,...) sendto(s,...) close(s) SERWER s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...)
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ół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ół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ółowoProgramowanie przy użyciu gniazdek
Programowanie przy użyciu gniazdek Gniazdo (ang. socket) pojęcie abstrakcyjne reprezentujące dwukierunkowy punkt końcowy połączenia. Dwukierunkowość oznacza możliwość wysyłania i przyjmowania danych. Wykorzystywane
Bardziej szczegółowoProgramowanie Sieciowe 1
Programowanie Sieciowe 1 dr inż. Tomasz Jaworski tjaworski@iis.p.lodz.pl http://tjaworski.iis.p.lodz.pl/ Klient UDP Kolejność wykonywania funkcji gniazdowych klienta UDP Protokół UDP jest bezpołączeniowy:
Bardziej szczegółowoKomunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1
Komunikacja międzyprocesowa Krzysztof Banaś Systemy rozproszone 1 Komunikacja międzyprocesowa Dla funkcjonowania systemów rozproszonych konieczna jest sprawna komunikacja pomiędzy odległymi procesami Podstawowym
Bardziej szczegółowoInstrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)
Instrukcja do laboratorium Systemów Operacyjnych (semestr drugi) Ćwiczenie dziesiąte Temat: Gniazda BSD protokoły internetowe Opracowanie: mgr in ż. Arkadiusz Chrobot Wprowadzenie 1. Usługi sieciowe w
Bardziej szczegółowoProgramowanie sieciowe
Programowanie sieciowe dr Tomasz Tyrakowski Dyż ury: wtorki 12:00 13:00 czwartki 14:00 15:00 pokój B4-5 e-mail: ttomek@amu.edu.pl materiały: http://www.amu.edu.pl/~ttomek 1 Wymagania podstawowa znajomość
Bardziej szczegółowoGniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta
Procesy w środowisku sieciowym! Obsługa! Protokół! Numery portów i ogólnie znane adresy! Połączenie (asocjacja) i gniazdo (półasocjacja)! Model klient-serwer " Serwer - bierne otwarcie kanału " Klient
Bardziej szczegółowo3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);
3.1. Określanie adresu połączonego hosta 3. #include int getpeername(int socket, struct sockaddr *addr, int *addrlen); Funkcja getpeername dostarcza adresu drugiej strony połączenia. Parametry:
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 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ół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ółowoZwielokrotnianie wejścia wyjścia
Zwielokrotnianie wejścia wyjścia Bartłomiej Świercz Katedra Mikroelektroniki i Technik Informatycznych Łódź, 21 marca 2006 Wstęp Zwielokrotnianie wejścia wyjścia informowanie przez jądro procesu użytkownika
Bardziej szczegółowo5. Algorytmy serwera
5. Algorytmy serwera 5.1. Typy serwerów Serwer iteracyjny (ang. iterative server) obsługuje zgłoszenia klientów sekwencyjnie, jedno po drugim. Serwer współbieżny (ang. concurrent server) obsługuje wiele
Bardziej szczegółowoPROTOKOŁY WARSTWY TRANSPORTOWEJ
PROTOKOŁY WARSTWY TRANSPORTOWEJ Na bazie protokołu internetowego (IP) zbudowane są dwa protokoły warstwy transportowej: UDP (User Datagram Protocol) - protokół bezpołączeniowy, zawodny; TCP (Transmission
Bardziej szczegółowoKomunikacja sieciowa - interfejs gniazd
SOE Systemy Operacyjne Wykład 14 Komunikacja sieciowa - interfejs gniazd dr inŝ. Andrzej Wielgus Instytut Mikroelektroniki i Optoelektroniki WEiTI PW Model komunikacji sieciowej Model OSI (ang. Open System
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ółowoProtokół UDP UDP (User Datagram Protocol) . [
1 Plan wykładu 1. Model TCP/IP protokoły warstwy transportowej: UDP, TCP, połączenie i rozłączenie w TCP. 2. Programowanie z wykorzystaniem gniazd. usługai DATETIME, TIME, ECHO. 3. Popularne aplikacje
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ół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ół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ół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ółowoTCP - receive buffer (queue), send buffer (queue)
BSD sockets c.d. TCP - receive buffer (queue), send buffer (queue) Z każdym gniazdem sieciowym są skojarzone: Bufor do odbierania danych (ang. receive buffer) Przychodzące dane są umieszczane w buforze
Bardziej szczegółowoZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013
ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013 Paweł Kowalik Zespół Szkół im. ks. S. Staszica w Tarnobrzegu KOMUNIKACJA SIECIOWA MIĘDZY URZĄDZENIAMI Z WYKORZYSTANIEM PROTKOŁU
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ół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ół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ółowoGniazda. S. Samolej: Gniazda 1
Gniazda dr inż. Sławomir Samolej Katedra Informatyki i Automatyki Politechnika Rzeszowska Program przedmiotu oparto w części na materiałach opublikowanych na: http://wazniak.mimuw.edu.pl/ oraz na materiałach
Bardziej szczegółowoŁącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.
Przykład: $ ls more Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi. Tworzenie łącza #include int pipe(int filedes[2]); Przykład: int
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ół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 warstwa transportowa SMTP TCP warstwa sieciowa warstwa łącza danych warstwa fizyczna
Bardziej szczegółowoProgramowanie aplikacji w architekturze Klient-Serwer - UDP
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 email: rataj@man.koszalin.pl
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ółowoSystemy rozproszone. Krzysztof Banaś Obliczenia równoległe 1
Systemy rozproszone Krzysztof Banaś Obliczenia równoległe 1 Historia i pojęcia wstępne Przetwarzanie współbieżne realizacja wielu programów (procesów) w taki sposób, że ich trwanie od momentu rozpoczęcia
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ół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ół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ółowoProgramowanie aplikacji równoległych i rozproszonych. Wykład 4
Wykład 4 p. 1/44 Programowanie aplikacji równoległych i rozproszonych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Gniazda - Wstęp
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ół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ółowoKrótkie wprowadzenie do korzystania z OpenSSL
Krótkie wprowadzenie do korzystania z OpenSSL Literatura: http://www.openssl.org E. Rescola, "An introduction to OpenSSL Programming (PartI)" (http://www.linuxjournal.com/article/4822) "An introduction
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ółowoWspółbieżność, tunelowanie i kapsułkowanie, XDR i RPC
Współbieżność, tunelowanie i kapsułkowanie, XDR i RPC 1. Serwery wielousługowe i wieloprotokołowe. 2. Sterowanie współbieżnością w serwerze współbieżność sterowana zapotrzebowaniem, alokacja wstępna procesów
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ółowoProxy (pełnomocnik) Cel: Zastosowanie: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego.
Proxy (pełnomocnik) Cel: Dostarczyć zamiennik pewnego obiektu, pozwalający kontrolować dostęp do niego. Zastosowanie: Wszędzie tam, gdzie oczekujemy bardziej zaawansowanego odwołania do obiektu, niż zwykły
Bardziej szczegółowoArchitektura typu klient serwer: uproszczony klient POP3
Architektura typu klient serwer: uproszczony klient POP3 Wydział Inżynierii Mechanicznej i Informatyki Instytut Informatyki Teoretycznej i Stosowanej dr inż. Łukasz Szustak Składniki systemu poczty e-mail
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ółowosocket(int domain, int type, int protocol)
Co identyfikuje adres IP a co port? IP identyfikuje hosta w sieci port identyfikuje typ procesu (np. 21 FTP, 25 SMTP, 49 LOGIN) gniazdo identyfikuje unikalny nr połączenia Czym różni się deskryptor gniazda
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ółowoTworzenie i wykorzystanie usług
Strona 1 Co to jest usługa w systemie Android? Usługi HTTP Obsługa wywołania HTTP GET Obsługa wywołania HTTP POST Obsługa wieloczęściowego wywołania HTTP POST Usługi lokalne Usługi zdalne Tworzenie usługi
Bardziej szczegółowo1. Model klient-serwer
1. 1.1. Model komunikacji w sieci łącze komunikacyjne klient serwer Tradycyjny podziała zadań: Klient strona żądająca dostępu do danej usługi lub zasobu Serwer strona, która świadczy usługę lub udostępnia
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ółowoKomunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1
Komunikacja międzyprocesowa Krzysztof Banaś Systemy rozproszone 1 Komunikacja międzyprocesowa Dla funkcjonowania systemów rozproszonych i równoległych z pamięcią rozproszoną konieczna jest sprawna komunikacja
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ół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ółowoJęzyk JAVA podstawy. Wykład 3, część 3. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna
Język JAVA podstawy Wykład 3, część 3 1 Język JAVA podstawy Plan wykładu: 1. Konstrukcja kodu programów w Javie 2. Identyfikatory, zmienne 3. Typy danych 4. Operatory, instrukcje sterujące instrukcja warunkowe,
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ółowoKomunikacja za pomocą potoków. Tomasz Borzyszkowski
Komunikacja za pomocą potoków Tomasz Borzyszkowski Wstęp Sygnały, omówione wcześniej, są użyteczne w sytuacjach błędnych lub innych wyjątkowych stanach programu, jednak nie nadają się do przekazywania
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ół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ółowoGniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl
Gniazda - Wstęp Oprogramowanie systemów równoległych i rozproszonych Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Domena adresowa 1/??
Bardziej szczegółowoSUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)
Program my_ping: wysłanie komunikatu ICMP z żądaniem echa Struktura icmp (plik netinet/ip_icmp.h) 0 7 8 15 16 31 TYP (icmp_type) KOD (icmp_code) IDENTYFIKATOR (icmp_id) SUMA KONTROLNA (icmp_cksum) NUMER
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ół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ółowoLaboratorium 03: Podstawowe konstrukcje w języku Java [2h]
1. Typy. Java jest językiem programowania z silnym systemem kontroli typów. To oznacza, że każda zmienna, atrybut czy parametr ma zadeklarowany typ. Kompilator wylicza typy wszystkich wyrażeń w programie
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ół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ółowoTryb bezpołączeniowy (datagramowy)
Tutaj trochę szerzej opisałam mechanizm gniazdek. 3 tematy wymienione poniŝej przeplatają się ze sobą więc wrzuciłam je do jednego worka i przedstawiłam w takim porządku, który wydawał mi się najbardziej
Bardziej szczegółowoWarstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa
Warstwa transportowa Warstwa 4 modelu OSI Warstwa 3 modelu TCP/IP warstwa aplikacji warstwa prezentacji warstwa sesji warstwa transportowa warstwa sieci warstwa łącza danych warstwa fizyczna warstwa aplikacji
Bardziej szczegółowoWspółbieżność w środowisku Java
Współbieżność w środowisku Java Wątki i ich synchronizacja Zagadnienia Tworzenie wątków Stany wątków i ich zmiana Demony Synchronizacja wątków wzajemne wykluczanie oczekiwanie na zmiennych warunkowych
Bardziej szczegółowoKurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016
Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,
Bardziej szczegółowo1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy
1.1 Przykład znajdowanie liczb pierwszych leżących w zadanym zakresie, tryb bezpołączeniowy Należy znaleźć liczby pierwsze w zakresie od 2 do N na P komputerach. Zarządca pocz[i], kon[i] wykonawca 1 wykonawca
Bardziej szczegółowoInstytut Teleinformatyki
Instytut Teleinformatyki Wydział Inżynierii Elektrycznej i Komputerowej Politechnika Krakowska programowanie usług sieciowych Dziedzina Unix laboratorium: 06 Kraków, 2014 06. Programowanie Usług Sieciowych
Bardziej szczegółowoLaboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach
Laboratorium Systemów Operacyjnych Ćwiczenie 4. Operacje na plikach Wykonanie operacji wymaga wskazania pliku, na którym operacja ma zostać wykonana. Plik w systemie LINUX identyfikowany jest przez nazwę,
Bardziej szczegółowo4. Procesy pojęcia podstawowe
4. Procesy pojęcia podstawowe 4.1 Czym jest proces? Proces jest czymś innym niż program. Program jest zapisem algorytmu wraz ze strukturami danych na których algorytm ten operuje. Algorytm zapisany bywa
Bardziej szczegółowoAplikacje internetowe i rozproszone - laboratorium
Aplikacje internetowe i rozproszone - laboratorium Enterprise JavaBeans (EJB) Celem tego zestawu ćwiczeń jest zapoznanie z technologią EJB w wersji 3.0, a w szczególności: implementacja komponentów sesyjnych,
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ół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ółowoJava. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ
Procesy i wątki Proces posiada samodzielne środowisko wykonawcze. Proces posiada własny zestaw podstawowych zasobów w czasie wykonywania; W szczególności, każdy proces ma własną przestrzeń pamięci. W uproszczeniu
Bardziej szczegółowo2. Interfejs gniazd. 2.1. Gniazdo
2. 2.1. Gniazdo Gniazdo (ang. socket): pewna abstrakcja wykorzystywana do wysyłania lub otrzymywania danych z innych procesów. Pełni rolę punktu końcowego w linii komunikacyjnej. to interfejs między programem
Bardziej szczegółowoAplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project
Aplikacja Sieciowa Jedną z fundamentalnych właściwości wielu aplikacji jest możliwość operowania pomiędzy jednostkami (np. PC), które włączone są do sieci. W Windows operacja ta jest możliwa przy wykorzystaniu
Bardziej szczegółowoTunelowanie, kapsułkowanie, XDR. 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR.
Tunelowanie, kapsułkowanie, XDR 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR. 1 Transmisja tunelowa i kapsułkowanie Sieci komputerowe rozwijały się stopniowo
Bardziej szczegółowoSieci komputerowe 1 DSRG
Sieci komputerowe 1 Sieci komputerowe 2 Warstwa transportowa Warstwa 4 modelu OSI Warstwa 3 modelu TCP/IP warstwa aplikacji warstwa prezentacji warstwa aplikacji warstwa sesji warstwa transportowa warstwa
Bardziej szczegółowo1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?
1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)? public class A { public int i; { i++; System.out.print(i); public static void main(string[] args) { A a1
Bardziej szczegółowoKomponenty sterowane komunikatami
Komponenty sterowane komunikatami 1. Usługa JMS asynchroniczność, model przesyłania komunikatów, 2. Przykład wysyłanie wiadomości, odbieranie wiadomości, komponent sterowany komunikatami 3. Komponenty
Bardziej szczegółowo1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);
1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4); a) b) c) d) 2. Jaki będzie wynik kompilacji i wykonania
Bardziej szczegółowo