* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Использование сокетов в Delphi
23 февраля 2009
Многочисленные вопросы на Круглом столе, посвящённые передаче данных по сети с помощью сокетов, показывают, что эта тема достаточно актуальна, но вызывает некоторые сложности у начинающих программистов. Данная статья является первой в цикле из трёх статей, призванных дать ответы на подобные вопросы. Она посвящена стандартным сокетам. Вторая статья будет посвящена сокетам Windows, а третья - внутреннему устройству классов VCL, предназначенных для передачи данных с помощью сокетов. Статьи не претендуют на исчерпывающее освещение проблемы (в частности, будут обсуждаться только протоколы TCP и UDP), однако они должны дать сведения, достаточные для понимания основных механизмов работы сокетов и дальнейшего самостоятельного их изучения. В статьях много дополнительной информации, которая не является необходимой непосредственно для написания программы, но расширяет кругозор в данной области знаний. Строго говоря, если писать только то, что необходимо для простейшей организации связи, каждая из трёх статей цикла уместилась бы на странице. Но в таком виде это было бы полезно только ламерам, которым лишь бы содрать откуда-нибудь готовое решение и абы как вставить его в свою "программу". А моя цель - написать что-то полезное для тех, кто пока ещё не знаком близко с сокетами, но хочет в первую очередь понять, как они устроены, а не получить что-то готовенькое. Таким людям, на мой взгляд, будет полезно знать то, что находится вокруг, потому что это знание помогает искать решения в нестандартных ситуациях.
Термин "стандартные сокеты", который будет встречаться на протяжении всей статьи, достаточно условен и нуждается в дополнительном пояснении. Строго говоря, стандартными сокетами называются сокеты Беркли (Berkley sockets), разработанные в университете Беркли для системы Unix. Как это ни парадоксально звучит, но сокеты Беркли появились до появления компьютерных сетей. Изначально они предназначались для взаимодействия между процессами в системе и только позже были приспособлены для TCP/IP. Работа с сокетами Беркли сделана максимально похожей на работу с файлами в Unix. В частности, для отправки и получения данных используются те же функции, что и для файлового ввода/вывода. Сокеты в Windows не полностью совместимы с сокетами Беркли (например, для них предусмотрены специальные функции отправки и получения данных, переопределены некоторые типы данных и т.п.). Но возможности работы с сокетами в Windows можно разделить на две части: то, что укладывается в идеологию сокетов Беркли, хотя и реализовано несколько иначе, и то, что является специфичным для Windows. Ту часть реализации сокетов Windows, которая по функциональности соответствует сокетам Беркли, мы будем называть стандартными сокетами, а сокетами Windows (Windows sockets) - специфичные для Windows расширения.