Iteracyjny serwer TCP i aplikacja UDP

Podobne dokumenty
Gniazda BSD implementacja w C#

Literatura uzupełniająca: W. Richard Stevens, Programowanie zastosowań sieciowych w systemie Unix WNT 1998

Gniazda BSD. komunikacja bezpołączeniowa

Programowanie Sieciowe 1

Gniazda UDP. Bartłomiej Świercz. Łódź, 3 kwietnia Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda UDP

Programowanie przy użyciu gniazdek

Komunikacja sieciowa - interfejs gniazd

Podstawowe typy serwerów

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

Programowanie sieciowe

Programowanie aplikacji równoległych i rozproszonych. Wykład 4

Gniazda - Wstęp. Oprogramowanie systemów równoległych i rozproszonych. Sposób komunikacji. Domena adresowa. olas@icis.pcz.pl

Instytut Teleinformatyki

Klient-Serwer Komunikacja przy pomocy gniazd

Gniazda BSD. Procesy w środowisku sieciowym. Gniazda podstawowe funkcje dla serwera. Gniazda podstawowe funkcje dla klienta

Obsługa plików. Systemy Operacyjne 2 laboratorium. Mateusz Hołenko. 25 września 2011

Tryb bezpołączeniowy (datagramowy)

Systemy rozproszone. Krzysztof Banaś Obliczenia równoległe 1

Komunikacja międzyprocesowa. Krzysztof Banaś Systemy rozproszone 1

ZESZYTY ETI ZESPOŁU SZKÓŁ W TARNOBRZEGU Nr 1 Seria: Teleinformatyka 2013

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

TCP - receive buffer (queue), send buffer (queue)

Gniazda. S. Samolej: Gniazda 1

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

Instrukcja do laboratorium Systemów Operacyjnych. (semestr drugi)

Warstwa transportowa. Warstwa transportowa. Enkapsulacja. Zapewnienie niezawodnego przesyłania danych /wg ISO/ Transmisja bezpołączeniowa

2. Interfejs gniazd Gniazdo

SUMA KONTROLNA (icmp_cksum) NUMER KOLEJNY (icmp_seq)

3. Identyfikacja. SKŁADNIA #include <sys/socket.h> int getpeername(int socket, struct sockaddr *addr, int *addrlen);

Sieci komputerowe 1 DSRG

Sockety TCP/IP - podstawy. Sieci Komputerowe II Wyk ład 2

Projektowanie oprogramowania systemów KOMUNIKACJA SIECIOWA I SYSTEMY RPC

Oprogramowanie komunikacyjne dla Internetu rzeczy Laboratorium nr 4 komunikacja unicastowa IPv6

PROTOKOŁY WARSTWY TRANSPORTOWEJ

Aplikacja Sieciowa. Najpierw tworzymy nowy projekt, tym razem pracować będziemy w konsoli, a zatem: File->New- >Project

Serwer współbieżny połączeniowy

Instytut Teleinformatyki

Krótkie wprowadzenie do korzystania z OpenSSL

Podstawowe typy serwerów

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

W różnych systemach definicje mogą się różnić od powyższej. W linuxie sprobuj man 7 ip do wyswietlenia opisu.

Kolejki FIFO (łącza nazwane)

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

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Pliki. Funkcje tworzące pliki i operujące na nich opisane są w części 2 pomocy systemowej. Tworzenie i otwieranie plików:

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Routing. część 3: wewnątrz routera. Sieci komputerowe. Wykład 4. Marcin Bieńkowski

Laboratorium z systemów operacyjnych. System plików - funkcje systemowe. Anna Wojak

1. Model klient-serwer

IPC: Kolejki komunikatów

Komputery i Systemy Równoległe Jędrzej Ułasiewicz 1

iseries Programowanie z użyciem gniazd

Aplikacja Sieciowa wątki po stronie klienta

Programowanie sieciowe

Laboratorium Systemów Operacyjnych. Ćwiczenie 4. Operacje na plikach

socket(int domain, int type, int protocol)

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

Obsługa plików Procesy

Łącza nienazwane(potoki) Łącza nienazwane mogą być używane tylko pomiędzy procesami ze sobą powiązanymi.

Architektura typu klient serwer: uproszczony klient POP3

Linux Kernel III. Character devices

Zadanie 2: transakcyjny protokół SKJ (2015)

Schemat dla UDP. = możliwe zablokowanie aplikacji KLIENT SERWER. s=socket(...) bind(s,...) recvfrom(s,...) sendto(s,...) recvfrom(s,...

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

DR INŻ. ROBERT WÓJCIK DR INŻ. JERZY DOMŻAŁ

Routing. część 1: adresowanie. Sieci komputerowe. Wykład 2. Marcin Bieńkowski

Tunelowanie, kapsułkowanie, XDR. 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR.

Opis protokołu RPC. Grzegorz Maj nr indeksu:

Funkcje zawarte w bibliotece < io.h >

Serwery współbieżne c.d.

Programowanie Programowanie z użyciem gniazd

Struktury. Przykład W8_1

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

5. Algorytmy serwera

4. Algorytmy klienta

Funkcje zawarte w bibliotece < io.h >

Przykład aplikacji UDP

SIP Studia Podyplomowe Ćwiczenie laboratoryjne Instrukcja

Programowanie Programowanie z użyciem gniazd

Internet Control Message Protocol Aplikacja ping

Remote Quotation Protocol - opis

Łącza nienazwane(potoki)

Bezpieczeństwo w M875

IBM i Wersja 7.2. Programowanie Programowanie z użyciem gniazd

Systemy Operacyjne 1 Laboratorium 3 Potoki i łącza nazwane w Linuksie (jeden tydzień) dr inż. Arkadiusz Chrobot

Model OSI/ISO. Komputer B. Warstwy w modelu OSI aplikacji. aplikacji. prezentacji Komputer A. prezentacji. sesji. sesji. komunikacja wirtualna

Programowanie współbieżne i rozproszone

Temat zajęć: Obsługa systemu plików.

Programowanie sieciowe

Gniazda BSD UNIWERSYTET GDAŃSKI WYDZIAŁ MATEMATYKI I FIZYKI. Jacek Nowicki

Adresowanie grupowe. Bartłomiej Świercz. Katedra Mikroelektroniki i Technik Informatycznych. Łódź, 25 kwietnia 2006

Struktury, unie, formatowanie, wskaźniki

SEGMENT TCP CZ. II. Suma kontrolna (ang. Checksum) liczona dla danych jak i nagłówka, weryfikowana po stronie odbiorczej

Dokumentacja wstępna TIN. Rozproszone repozytorium oparte o WebDAV

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ mlew@ippt.gov.pl ]

ARP Address Resolution Protocol (RFC 826)

Zwielokrotnianie wejścia wyjścia

Beej s Guide to Network Programming

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

Podstawy Transmisji Danych. Wykład IV. Protokół IPV4. Sieci WAN to połączenia pomiędzy sieciami LAN

Transkrypt:

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 and returns a file descriptor that refers to that endpoint. int socket(int domain, int type, int protocol); domain e.g. AF_INET, AF_INET6, AF_UNIX type e.g. SOCK_STREAM, SOCK_DGRAM protocol e.g. 0 //wybierany automatycznie Zwraca: deskryptor utworzonego gniazda lub -1 (błąd, ustawia errno).

bind() assigns the address specified by addr to the socket referred to by the file descriptor sockfd int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); sockfd - deskryptor gniazda addr - adres, który zostanie przypisany gniazdu addrlen - rozmiar struktury przekazanej jako addr Zwraca: 0 (ok) lub -1 (błąd, ustawia errno).

bind() W praktyce: sa.sin_port = htons([port aplikacji]); sa.sin_addr.s_addr = htonl(inaddr_any); bind(sockfd, (struct sockaddr *) &sa, sizeof(sa));

listen() marks the socket [...] as a passive socket, that is, as a socket that will be used to accept incoming connection requests using accept. int listen(int sockfd, int backlog); sockfd - deskryptor gniazda backlog - rozmiar kolejki, w której buforowane są żądania połączeń. Jeżeli żądanie pojawi się gdy kolejka jest pełna, nie dotrze do aplikacji. Ten parametr jest jedynie wskazówką (ang. hint), implementacja może ją zignorować. Zwraca: 0 (ok) lub -1 (błąd, ustawia errno) (dla zainteresowanych) o działaniu backlog w systemie Linux: http://veithen.github.io/2014/01/01/how-tcp-backlog-works-in-linux.html

accept() extracts the first connection request on the queue of pending connections for the listening socket, sockfd, creates a new connected socket, and returns a new file descriptor referring to that socket. int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen); sockfd - deskryptor gniazda serwera addr - struktura, w której zostaną umieszczone dane klienta addrlen - rozmiar struktury przekazanej jako addr Zwraca: deskryptor połączonego klienta lub -1 (błąd, ustawia errno).

accept() W praktyce: struct sockaddr_in sa;... socklen_t sa_size; accept(sockfd, (struct sockaddr *) &sa, &sa_size);

read() attempts to read up to count bytes from file descriptor fd into the buffer starting at buf. ssize_t read(int fd, void *buf, size_t count); fd - deskryptor gniazda, które będzie oczekiwało na dane buf - bufor, do którego zostaną przekazane odebrane dane count - maksymalna ilość danych, która będzie przekazana do bufora Zwraca: liczbę odebranych bajtów lub -1 (błąd, ustawia errno) lub 0 (gniazdo zamknięte).

write() writes up to count bytes from the buffer pointed buf to the file referred to by the file descriptor fd ssize_t write(int fd, const void *buf, size_t count); fd - deskryptor gniazda, które będzie wysyłało na dane buf - bufor, z którego zostaną odczytane dane do wysłania count - maksymalna ilość danych, która będzie odczytana z bufora Zwraca: liczbę wysłanych bajtów lub -1 (błąd, ustawia errno).

close() closes a file descriptor, so that it no longer refers to any file and may be reused. int close(int fd); fd - deskryptor gniazda, które zostanie zamknięte Zwraca: 0 (ok) lub -1 (błąd, ustawia errno).

setsockopt int setsockopt(int socket, int level, int option_name, const void *option_value, socklen_t option_len); socket - deskryptor gniazda level - poziom protokołu np. SOL_SOCKET option_name - nazwa ustawianej opcji np. SO_REUSEADDR option_value - wartość opcji rzutowana na (void *) lub (char *) option_len - rozmiar ustawianej wartości Zwraca 0 (ok) lub -1 (bład, ustawia errno na kod błędu).

setsockopt SO_REUSEADDR int nfoo = 1; setsockopt(nsocket, SOL_SOCKET, SO_REUSEADDR, (char*)&nfoo, sizeof(nfoo)); //przed wywołaniem bind Efekt: krótszy okres oczekiwania na możliwość ponownego dowiązania gniazda do tego samego adresu (IP:port). Alternatywa: SO_REUSEPORT

Zadanie Napisz serwer, który przyjmie dwie liczby od klienta, obliczy sumę oraz odeśle wynik. Napisz klienta, który wczyta dwie liczby z klawiatury i prześle do serwera. Następnie wypisze wynik na ekranie. Przetestuj swoje programy z osobą siedzącą obok. Wskazówka: sprintf(), strtol() / sscanf(), fgets() / argv

Aplikacja UDP

TCP vs UDP TCP Strumieniowy Gwarancja dostarczenia Porządek FIFO Kontrola przepływu UDP Pakietowy Brak gwarancji dostarczenia Brak porządku FIFO

Funkcje wywoływane przez węzeł UDP socket() - bind() - sendto() / recvfrom() - close()

socket() Creates an endpoint for communication and returns a file descriptor that refers to that endpoint. int socket(int domain, int type, int protocol); domain e.g. AF_INET, AF_INET6, AF_UNIX type e.g. SOCK_STREAM, SOCK_DGRAM protocol e.g. 0 //wybierany automatycznie Zwraca: deskryptor utworzonego gniazda lub -1 (błąd, ustawia errno).

bind() assigns the address specified by addr to the socket referred to by the file descriptor sockfd int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); sockfd - deskryptor gniazda addr - adres, który zostanie przypisany gniazdu addrlen - rozmiar struktury przekazanej jako addr Zwraca: 0 (ok) lub -1 (błąd, ustawia errno).

bind() W praktyce: sa.sin_port = htons([port aplikacji]); sa.sin_addr = IN_ADDR_ANY; bind(sockfd, (struct sockaddr *) &sa, sizeof(sa));

sendto() ssize_t sendto(int socket, const void *message, size_t length, int flags, const struct sockaddr *dest_addr, socklen_t dest_len); socket - deskryptor gniazda sieciowego message - bufor z wiadomością do wysłania length - rozmiar wiadomości flags - flagi, zostawiamy 0 dest_addr - struktura, dla UDP: sockaddr_in z adresem węzła docelowego dest_len - rozmiar przekazanej struktury adresowej Zwraca: liczbę wysłanych bajtów lub -1 (błąd, ustawia errno na kod błędu).

Problemy - MTU - Za dużo danych przekazanych do sendto? - Brak gwarancji dostarczenia

recvfrom() size_t recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len); socket - deskryptor gniazda sieciowego buffer - bufor, do którego będą zapisywane odebrane dane length - rozmiar buforu flags - flagi, zostawiamy 0 address - dla UDP: sockaddr_in, wypełniane przez recvfrom danymi adresowymi osoby przesyłającej dane. Można wpisać NULL. address_len - rozmiar przekazanej struktury adresowej. Zwraca: rozmiar odebranej wiadomości lub 0 (gniazdo zamknięte) lub -1 (błąd, ustwaia errno na kod błędu).

close() closes a file descriptor, so that it no longer refers to any file and may be reused. int close(int fd); fd - deskryptor gniazda, które zostanie zamknięte Zwraca: 0 (ok) lub -1 (błąd, ustawia errno).

Zadanie Napisz (sam lub w zespole 2os.) serwer daytime UDP i klienta daytime UDP. Serwer: oczekuje na wiadomości od klientów, na każdą odpowiada bieżącą datą i czasem. Klient: wysyła wiadomość do serwera, odbiera bieżącą datę i czas, wyświetla na ekranie.