Примеры (язык Си)
Программа – сервер
Создание простейшего TCP-сервера состоит из следующих шагов:
- Создание TCP-сокетов вызовом функции socket().
- Привязывание сокета к прослушиваемому порту вызовом функции bind(). Перед вызовом bind() программист должен объявить структуру sockaddr_in, очистить ее (при помощи memset()), затем sin_family (PF_INET или PF_INET6) и заполнить поля sin_port (прослушиваемый порт, указать в виде последовательности байтов). Преобразование short int в порядок байтов может быть выполнено при помощи вызова функции htons() (сокращение от «от хоста в сеть»).
- Подготовка сокета к прослушиванию на предмет соединений (создание прослушиваемого сокета) при помощи вызова listen().
- Принятие входящих соединений через вызов accept(). Это блокирует сокет до получения входящего соединения, после чего возвращает дескриптор сокета для принятого соединения. Первоначальный дескриптор остается прослушиваемым дескриптором, а accept() может быть вызван вновь для этого сокета в любое время (пока он закрыт).
- Соединение с удаленным хостом, которое может быть создано при помощи send() и recv() или write() и read().
- Итоговое закрытие каждого открытого сокета, который больше не нужен, происходит при помощи close().


Программа – клиент
- Создание TCP-сокета вызовом socket().
- Соединение с сервером при помощи connect(), передача структуры sockaddr_in с sin_family с указанными PF_INET или PF_INET6, sin_port для указания порта прослушивания (в байтовом порядке), и sin_addr для указания IPv4 или IPv6 адреса прослушиваемого сервера (также в байтовом порядке).
- Взаимодействие с сервером при помощи send() и recv() или write() и read().
- Завершение соединения и сброс информации при вызове close().


(*) Приведены примеры для Unix подобных систем с использованием стандартных библиотек.
Подробнее о работе с сокетами в других системах можно посмотреть по ссылкам (указаны в разделе «Полезные ссылки»)
|