Примеры (язык Си)

Программа – сервер
Создание простейшего 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 подобных систем с использованием стандартных библиотек.
 Подробнее о работе с сокетами в других системах можно посмотреть по ссылкам (указаны в разделе «Полезные ссылки»)