1 / 25

Сокеты

Сокеты. Сетевой интерфейс прикладных программ (API). Службы, обеспечивающие интерфейс взаимодействия между приложениями и сетевыми протоколами. Приложение. Network API. Протокол A. Протокол B. Протокол C. Сокет. C окет – абстрактное представление конечной точки связи

Download Presentation

Сокеты

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Сокеты

  2. Сетевой интерфейс прикладных программ(API) • Службы, обеспечивающие интерфейс взаимодействия между приложениями и сетевыми протоколами Приложение Network API Протокол A Протокол B Протокол C

  3. Сокет • Cокет – абстрактное представление конечной точки связи • Сокеты служат для : • установления соединений • задания адресов конечных точек подключения

  4. Дескрипторы сокетов Таблица дескрипторов Family: AF_INET Service: SOCK_STREAM Local IP: 111.22.3.4 Remote IP: 123.45.6.78 Local Port: 2249 Remote Port: 3726 0 1 2 3 4

  5. Создание сокета int socket(intfamily,inttype,int proto); • familyуказывает семейство протоколов (AF_INET for TCP/IP). • typeуказывает тип сервиса (SOCK_STREAM, SOCK_DGRAM). • protocolзадает конкретный протокол (обычно 0, по умолчанию).

  6. socket() • socket()возвращает дескриптор сокета или -1 при ошибке • socket()выделяет в системе ресурсы, необходимые конечной точке подключения

  7. Адрес конечной точки • Для TCP/IP необходимо задание IP-адреса и номера порта • Другие протоколы могут использовать другие методы адресации

  8. Универсальная структура адреса structsockaddr { uint8_t sa_len; sa_family_tsa_family; char sa_data[14]; }; • sa_familyуказывает тип адреса. • sa_dataсодержит значение адреса

  9. struct sockaddr_in (IPv4) structsockaddr_in { uint8_t sin_len; sa_family_tsin_family; in_port_tsin_port; structin_addrsin_addr; char sin_zero[8]; };

  10. structsockaddr_in6 (IPv6) struct sockaddr_in6 { uint8_t sin6_len; sa_family_tsin6_family; in_port_tsin6_port; uint32_t sin6_flowinfo; struct in6_addr sin6_addr; uint32_t sin6_scope_id; };

  11. Сетевой порядок байтов • Значения, сохраняемые в структуре sockaddr_inдолжны иметь сетевой порядок байтов: • sin_portномер порта • sin_addr IP-адрес

  12. Преобразование порядка байтов ‘h’ : порядок байтов хоста ‘n’ : сетевой порядок байтов ‘s’ : short (16bit) ‘l’ : long (32bit) uint16_t htons(uint16_t); uint16_t ntohs(uint_16_t); uint32_t htonl(uint32_t); uint32_t ntohl(uint32_t);

  13. Присвоение адреса сокету • Функцияbind()используется для присвоения адреса сокету int bind(intsockfd, const structsockaddr *myaddr, intaddrlen); • bindвозвращает 0 при успехе или -1 при ошибке

  14. bind() • Вызов bind()назначает адрес, заданный в структуре sockaddr,дескриптору сокета • Указатель на структуру адреса должен быть преобразован к указателю на универсальную структуру. Netprog: Sockets API

  15. Преобразование адресов IPv4 intinet_aton( char *, structin_addr *); Преобразует адрес из текстового вида в 32-битное значение в сетевом порядке байтов. char *inet_ntoa(structin_addr); Преобразует адрес из 32-битного числа в текстовую строку Netprog: Sockets API

  16. Подключение к серверу • Функцияconnect()используется для подключения к серверу int connect(intsockfd, const structsockaddr *serv_addr, socklen_taddrlen);

  17. connect() • connect() используется клиентом для установки соединения при использовании надежного протокола TCP • параметр sockaddr задает структуру адреса сервера

  18. Переход сокета в состояние LISTEN • Функцияlisten()используется для перевода сокета в состояние LISTEN (готовность к приему входящих подключений) int listen(intsockfd, int backlog);

  19. listen() • запросы на подключение к сокету начинают приниматься системой • аргумент backlog задает максимальную длину очереди входящих соединений.

  20. Согласие на обслуживание соединения • Функцияaccept()используется для выбора следующего клиента из очереди установленных соединений int accept(intsockd, structsockaddr *cliaddr, socklen_t *addrlen);

  21. accept() • Если очередь соединений пуста, процесс переходит в состояние ожидания • Параметр cliaddrслужит для получения адреса клиента, clilen – длина структуры адреса

  22. Обмен данными • Функцииsend() и recv()используются для передачи и приема данных соответственно int send(int socket, const void *msg, size_tlen, int flags); intrecv(int socket, void *buf, size_tlen, int flags);

  23. send() • cлужит для отправки сообщения • msg – адрес передаваемого сообщения • len– длина передаваемого сообщения • flags– дополнительные параметры (обычно 0)

  24. recv() • служит для приема сообщения • msg – адрес буфера приема • len– максимальное количество принимаемых байт • flags– дополнительные параметры (обычно 0)

  25. Закрытие сокета • Функцииclose() (UNIX) или closesocket() (Windows)используются для корректного завершения TCP-соединения int close(intsockfd); intclosesocket(intsd);

More Related