
- •3. Возникают некоторые проблемы
- •2. Ввод-вывод сетевых данных и данных в файловой системе
- •3. Возникают некоторые проблемы
- •4. Абстракция сокетов
- •5. Отличие дескриптора сокета от дескриптора файла
- •6. Создание сокета
- •7. Параметры сокета
- •8. Семейства протоколов и адресов
- •9. Тип соединения
- •10. Выбор протокола
- •11. Процесс
- •12. Что такое дескриптор сокета?
- •14. Использование сокета в программе
- •15. Настройка сокета
- •15. Соединение сокета
- •16. Указание локального адреса (порта протокола)
- •17. Передача данных через сокет
- •18. Передача данных через соединенный сокет
- •19. Передача данных через не соединенный сокет
- •20. Прием данных через сокет
- •22. Сокеты и серверы
- •23. Функция listen
- •24. Функция accept
- •25. Процесс-сервер
- •26. Принципы проектирования параллельного сервера
- •28. Подводя итоги
Сокеты
Различные реализации сокетов
Ввод-вывод сетевых данных и данных в файловой системе
3. Возникают некоторые проблемы
4. Абстракция сокетов
5. Отличие дескриптора сокета от дескриптора файла
6. Создание сокета
7. Параметры сокета
8. Семейства протоколов и адресов
9. Тип соединения
10. Выбор протокола
11. Процесс
12. Что такое дескриптор сокета?
13. Модель интерфейса сокетов
14. Использование сокета в программе
15. Соединение сокета
16. Указание локального адреса (порта протокола)
17. Передача данных через сокет
18. Передача данных через соединенный сокет
19. Передача данных через не соединенный сокет
20. Прием данных через сокет
21. Процесс целиком
22. Сокеты и серверы
23. Функция listen
24. Функция accept
25. Процесс-сервер
26. Принципы проектирования параллельного сервера
27. Функция select
28. Подводя итоги
Интерфейс прикладной программы (API) представляет собой просто набор функций (интерфейс), использующийся программистами для разработки прикладных программ в определенных компьютерных средах. Программист Windows, например, желающий написать программу, может воспользоваться широким набором функций, предоставленных в их распоряжение фирмой Microsoft — интерфейсом прикладных программ Windows или Windows API. В восьмидесятых годах американское правительственное агентство по поддержке исследовательских проектов (ARPA), финансировало реализацию протоколов TCP/IP для UNIX в Калифорнийском университете в г. Беркли. В ходе этого проекта группа исследователей-программистов разработала интерфейс прикладного программирования для сетевых приложений TCP/IP (TCP/IP API). По причинам, изложенным ниже, этот интерфейс был назван сокетами TCP/IP (TCP/IP sockets).
Интерфейс сокетов - это API, который определяет набор функций, позволяющий разрабатывать приложения для использования в сетях TCP/IP.
Изначально, сокеты были встроены в операционную систему UNIX. Однако многие другие операционные системы, например Microsoft Windows, также реализовали интерфейс сокетов в виде библиотек программ. Другими словами, для того чтобы выполнить сетевую функцию в операционной системе, отличной от UNIX, вам необходимо вызвать соответствующую процедуру из библиотеки сокетов. Несмотря на различия в операционных системах, исходные тексты программ, написанных в них, немногим отличаются друг от друга. В любой программе, для того чтобы выполнить определенные действия, вызывается соответствующая функция.
2. Ввод-вывод сетевых данных и данных в файловой системе
Интерфейс сокетов Беркли проще понять, если вы имеете хотя бы общее представление о системе ввода-вывода в UNIX. Как уже было сказано, разработчики сокетов Беркли стремились реализовать протоколы TCP/IP в рамках операционной среды UNIX. При этом они располагали уже имеющимся в UNIX набором вызовов системных функций. В результате, интерфейс сокетов использовал те же системные вызовы, что и остальные программы. Он оказался встроенным в саму операционную систему. Если вы не знакомы с UNIX, мысль встроить интерфейс сокетов в саму операционную систему может показаться странной. Однако если рассмотреть систему ввода-вывода в UNIX повнимательней, оказывается, что интерфейс, размещенный внутри системы, смотрится вполне естественно и натурально.
Системные вызовы ввода-вывода в UNIX выглядят как последовательный цикл, состоящий из операций типа открыть-считать-записать-закрыть. Файл, перед тем как читать из него, должен быть открыт. Далее над ним выполняются операции по считыванию/записи. По окончании операций файл закрывается.
Программисты в UNIX могут не знать различий между файлами и внешними устройствами. Одни и те же системные вызовы используются по отношению к принтеру, модему, дисплею и файлам. Внешние устройства и файлы отображены в UNIX на одну файловую систему. Чтобы открыть файл или получить доступ к устройству, например стримеру, программист должен вызвать одну и ту же системную функцию. В ответ на системный вызов UNIX возвращает так называемый дескриптор файла (file descriptor); его иногда называют указателем (file handler). Дескриптор файла указывает на внутрисистемную таблицу, описывающую открытый файл или устройство. Для файла в таблице могут приводиться его имя, размер, дата создания. Дескриптор файла в UNIX может указывать на файл, внешнее устройство или любой другой объект, позволяющий выполнять над ним системные функции ввода или вывода.
На первых порах разработки интерфейса сокетов исследователи пытались заставить сетевой ввод-вывод функционировать так же, как и любой другой ввод-вывод UNIX. Другими словами, они хотели, чтобы интерфейс сокетов считывал и записывал данные в уже известном нам цикле открыть-считать-записать-закрыть. То есть устанавливая сетевое соединение, программа бы открывала его, затем считывала и записывала в него данные. Наконец, соединение закрывалось бы. С точки зрения UNIX такой подход сделал бы сетевой ввод-вывод точно таким же, как и все остальные операции по вводу-выводу данных, значительно облегчив интеграцию сокетов в операционную систему.