Similar presentations:
Сетевое взаимодействие через сокеты
1. Сетевое взаимодействие через сокеты
2. Сокеты
Средство межпроцессного взаимодействия (на одной или разныхмашинах)
Возможна передача данных по разным протоколам (TCP, UDP, RAW)
Доступны и в UNIX-like, и в Windows
Socket(ip_2, port_2)
1
2
Socket(ip_1, port_1)
3. Клиент и сервер
Клиент — участник межсетевого взаимодействия, который формируетзапросы (сообщения) и принимает ответы на эти запросы
Сервер — участник межсетевого взаимодействия, принимающий и
обрабатывающий запросы от клиента
Р2Р-сеть (peer-to-peer) — децентрализованная архитектура сети, в
которой каждый участник взаимодействия является одновременно и
клиентом, и сервером
4. Алгоритм работы сервера
•Создание сокета•int socket (int domain, int type, int protocol)
•Связывание сокета с адресом и портом
•int bind (int sock, struct sockaddr * addr, int addrlen)
•Перевод сокета в режим ожидания запросов от клиентов («слушающий» режим)
•int listen(int sock, int addrlen)
•Создание сокета для общения с клиентом
•int accept(int sock, void * addr, int * addrlen)
•Обработка запросов
•recv для чтения сообщения, send для отправки
•Закрытие клиентского сокета
•close(int sock)
5. Алгоритм работы клиента
•Создание сокета•int socket (int domain, int type, int protocol)
•Связывание сокета с адресом и портом
•int bind (int sock, struct sockaddr * addr, int addrlen)
•Соединение сокета с адресом и портом
•int connect(int sock, sockaddr * servaddr, int addrlen)
•Обработка запросов
•recv для чтения сообщения, send для отправки
•Закрытие клиентского сокета
•close(int sock)
6. Заголовочные файлы в UNIX
#include#include
#include
#include
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
7. Функции для работы с сокетами в Linux
int›
›
›
int
›
›
›
int
›
›
›
int
›
›
int
›
›
›
int
›
socket (int domain, int type, int protocol)
domain = {AF_INET, AF_UNIX, AF_INET6, AF_IPX, …}
type = {SOCK_STREAM, SOCK_DGRAM, SOCK_RAW}
protocol – чаще всего 0
bind (int sock, struct sockaddr * addr, int addrlen)
Sock – дескриптор сокета
Addr – структура для хранения адреса
Addrlen = sizeof(addr)
connect(int sock, struct sockaddr * addr, int addrlen)
Sock – дескриптор сокета
Addr – структура для хранения адреса (адрес сервера)
Addrlen = sizeof(addr)
listen(int sock, int queuesize)
Sock – дескриптор сокета, который будет переводиться слушающий режим
Queuesize – размер входных подключений (размер очереди)
accept(int sock, void * addr, int * addrlen)
Sock – дескриптор слушающего сокета
Addr – структура для хранения адреса клиента (можно NULL)
Addrlen = sizeof(addr)(NULL)
close(int sock)
Sock – дескриптор сокета, который будет закрыт
8. Функции чтения и записи
int send(int sockfd, const void *msg, int len, int flags)›
Sockfd – сокет, куда шлем
›
Msg – сообщение
›
Len – размер сообщения
›
Flags – флаги (можно NULL)
int recv(int sockfd, const void *msg, int len, int flags)
›
Sockfd – сокет, откуда читаем
›
Msg – буфер сообщения
›
Len – размер буфера
›
Flags – флаги (можно NULL)
9. Заголовочные файлы в Windows
#include <winsock2.h>Линковать с ws2_32 (-lws2_32)
10. Функции для работы с сокетами в Windows
int WSAStartup (WORD Version, LPWSADATA lpWSAData)›
Version = MAKEWORD(2, 2)
›
lpWSAData – почти бесполезная структура, которую нужно в начале создать
SOCKET socket (int domain, int type, int protocol)
›
domain = {AF_INET, AF_UNIX, AF_INET6, AF_IPX, …}
›
type = {SOCK_STREAM, SOCK_DGRAM, SOCK_RAW}
›
protocol – чаще всего 0
int WSACleanup ()
Остальное идентично функциям в Linux