Определение.
Сокеты — метод установления соединения между клиентской и серверной программами через локальные или глобальные сети, через Internet, а также между различными процессами на одном компьютере. Сокет удобно рассматривать как конечную точку соединения. «Клиентский» сокет на одном компьютере использует предопределенный сетевой адрес, для того чтобы связаться с «серверным» сокетом на другом компьютере. После того как соответствующие сокеты установили диалог между собой, два компьютера смогут начать обмениваться данными и услугами.

Сокеты, созданные в 80-х годах в Калифорнийском университете в Беркли, впервые явились миру Unix в обличье интерфейса Berkeley Sockets Interface. Это был программный механизм, созданный с целью помочь мощным, объединенным в сеть компьютерам организовать эффективный обмен информацией.

К середине 90-х годов корпорация Microsoft по своему обыкновению разработала собственный вариант сокетов — Windows Sockets (сегодня чаще называемые WinSock), с помощью которых Windows-приложения могли взаимодействовать по сетевым соединениям.

Разработчик программного обеспечения Джим Фрост в своей книге «Windows Sockets: объяснение второпях» (Windows Sockets: A Quick and Dirty Primer), размещенной в Web, пишет: «Сокеты — это эквивалент телефона в мире компьютерных программ, где устройства, имеющие свои собственные числовые адреса, становятся средствами осуществления двусторонних взаимодействий».

Программисты используют понятия «клиент» и «сервер», чтобы подчеркнуть отличия между компьютером, выполняющим «звонок», и компьютером, к которому этот звонок обращен. Компьютеры с серверными сокетами поддерживают открытым коммуникационный порт, всегда оставаясь готовыми к неожиданному входящему вызову.

Клиенты, как правило, определяют номер порта интересующего их сервера, выполняя поиск по базе данных системы доменных имен Domain Naming System.

В момент соединения на сервере происходит небольшая суматоха. Вместо того чтобы продолжать сеанс связи, используя исходный порт, сервер переключает диалог на «вспомогательный» порт, чтобы освободить основную линию для других клиентов, которые, возможно, попытаются обратиться к серверу.

С возникновением Web сокеты сохранили за собой важную роль, хотя порой и скрытую, в поддержке Internet-коммуникаций.

«Каждое приложение, которое вы используете для выхода в Internet, базируется на фундаменте сокетов», — объясняет Фрост. Например, сокеты являются неотъемлемой частью адресов Web-сайтов, Web-браузеров и компонентов, реализующих технологию защиты, получившую название Secure Sockets Layer.

Однако современным Web-программистам почти никогда не приходится вручную создавать свои собственные сокеты.

«Сокеты на самом деле не нужны для разработки Web-приложений, — утверждает Брайан Бииж Йоргенсен, автор опубликованного в Web «Руководства Биижа по сетевому программированию: использование сокетов Internet» (Beej?s Guide to Network Programming: Using Internet Sockets).

«Когда бы вы ни использовали Java, сервлеты, Common Gateway Interface, PHP или что-то другое, скорее всего, вам не придется явно открывать сокет, — заметил он. — И все же механизм сокетов по-прежнему используется, поддерживая соединение между пользователем и Web-приложением, однако подробности работы сокетов, как правило, скрыты за более высокими уровнями, так что большинству просто не приходится иметь с ними дело. Следует помнить, что все без исключения Web-браузеры, FTP-клиенты, клиенты электронной почты и соответствующие серверы для выполнения своих функций используют сокеты».

Фрост говорит, что на создание примера в разделе «Кодирование простого сокета» у него ушло всего 15 секунд. А сколько времени и сил для этого требовалось в 1995 году? «Я мог бы, пожалуй, уложиться в 10-15 минут, но полностью это зависело не от меня, — объясняет он. — Приходилось помнить об очень многих мелких деталях, например названия полей, которые необходимо поместить в структуру адреса, и имена констант, которые следует использовать для создания сокета TCP».

Сегодня программисты освобождены от трудоемкой рутинной работы по созданию сокетов. Ее удалось переложить на новое поколение библиотек классов. Примерами таких библиотек, по словам Фроста, могут служить Microsoft Foundation Class Csocket и CsocketFile. В операционной системе Unix программисты могут воспользоваться Socket++.

Программистам на языке Java доступен собственный механизм инструментальных средств для работы с сокетами.

Java.net.Socket — широко используемый класс для создания не зависящего от платформы клиентского сокета, в то время как java.net.ServerSocket может создавать сокет, готовый к получению запросов от клиентов. Благодаря этому разработчики могут создавать сокеты быстро, не увязая в сложных деталях программирования.


Больше информации о сокетах

Web — готовый ресурс для получения подробной информации о создании сокетов на различных платформах. Ниже перечислены несколько полезных сайтов.


Кодирование простого сокета

Пример написанного Джимом Фростом Java-приложения, использующего механизм сокетов для реализации простого потокового сервера