Глава 5 Пример TCP-соединения клиент-сервер
Глава 5
Пример TCP-соединения клиент-сервер
5.1. Введение
Напишем простой пример пары клиент-сервер, используя элементарные функции из предыдущей главы. Наш простой пример — это эхо-сервер, функционирующий следующим образом:
1. Клиент считывает строку текста из стандартного потока ввода и отправляет ее серверу.
2. Сервер считывает строку из сети и отсылает эту строку обратно клиенту.
3. Клиент считывает отраженную строку и помещает ее в свой стандартный поток вывода.
На рис. 5.1 изображена пара клиент-сервер вместе с функциями, используемыми для ввода и вывода.
Рис. 5.1. Простой эхо-клиент и эхо-сервер
Между клиентом и сервером мы показали две стрелки, но на самом деле это одно двустороннее соединение TCP. Функции fgets и fputs имеются в стандартной библиотеке ввода-вывода, а функции writen и readline приведены в разделе 3.9.
Мы разрабатываем нашу собственную реализацию эхо-сервера, однако большинство реализаций TCP/IP предоставляют готовый эхо-сервер, работающий как с TCP, так и с UDP (см. раздел 2.12). С нашим собственным клиентом мы также будем использовать и готовый сервер.
Соединение клиент-сервер, отражающее вводимые строки, является корректным и в то же время простым примером сетевого приложения. На этом примере можно проиллюстрировать все основные действия, необходимые для реализации соединения клиент-сервер. Все, что вам нужно сделать, чтобы применить его к вашему приложению, — это изменить операции, которые выполняет сервер с принимаемыми от клиентов данными.
С помощью этого примера мы можем не только проанализировать запуск нашего клиента и сервера в нормальном режиме (ввести строку и посмотреть, как она отражается), но и исследовать множество «граничных условий»: выяснить, что происходит в момент запуска клиента и сервера; что происходит, когда клиент нормальным образом завершает работу; что происходит с клиентом, если процесс сервера завершается до завершения клиента или если возникает сбой на узле сервера, и т.д. Рассмотрев эти сценарии мы сможем понять, что происходит на уровне сети и как это представляется для API сокетов, и научиться писать приложения так, чтобы они умели обрабатывать подобные ситуации.
Во всех рассматриваемых далее примерах присутствуют зависящие от протоколов жестко заданные (hard coded) константы, такие как адреса и порты. Это обусловлено двумя причинами. Во-первых, нам необходимо точно понимать, что нужно хранить в структурах адресов, относящихся к конкретным протоколам. Во-вторых, мы еще не рассмотрели библиотечные функции, которые сделали бы наши программы более переносимыми. Эти функции рассматриваются в главе 11.
В последующих главах код клиента и сервера будет претерпевать многочисленные изменения, по мере того как вы будете больше узнавать о сетевом программировании (см. табл. 1.3 и 1.4).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Глава 10 Пример SCTP-соединения клиент-сервер
Глава 10 Пример SCTP-соединения клиент-сервер 10.1. Введение Воспользуемся некоторыми элементарными функциями из глав 4 и 9 для написания полнофункционального приложения SCTP с архитектурой клиент-сервер типа «один-ко-многим». Сервер из нашего примера будет аналогичен
12.2. Клиент IPv4, сервер IPv6
12.2. Клиент IPv4, сервер IPv6 Общим свойством узла с двойным стеком является то, что серверы IPv6 могут выполнять обслуживание клиентов IPv4 и IPv6. Это достигается за счет преобразования адресов IPv4 к виду IPv6 (см. рис. А.6). Пример такого преобразования приведен на рис. 12.1. Рис. 12.1.
12.3. Клиент IPv6, сервер IPv4
12.3. Клиент IPv6, сервер IPv4 Теперь мы поменяем протоколы, используемые клиентом и сервером в примере из предыдущего раздела. Сначала рассмотрим TCP-клиент IPv6, запущенный на узле с двойным стеком протоколов.1. Сервер IPv4 запускается на узле, поддерживающем только IPv4, и создает
10.1.2 TCP и модель клиент/сервер
10.1.2 TCP и модель клиент/сервер TCP естественным образом интегрируется в окружение клиент/сервер (см. рис. 10.1). Серверное приложение прослушивает (listen) поступающие запросы на соединение. Например, службы WWW, пересылки файлов или доступа с терминала прослушивают запросы,
6.7. Пример программы клиент-сервер
6.7. Пример программы клиент-сервер Перепишем наш пример программы типа клиент-сервер из раздела 4.2 с использованием двух очередей сообщений. Одна из очередей предназначена для передачи сообщений от клиента серверу, а другая — в обратную сторону.Заголовочный файл svmsg.h
Глава 10 Архитектура клиент-сервер: складской учет
Глава 10 Архитектура клиент-сервер: складской учет Создание большинства бизнес-приложений требует решения целого комплекса задач по хранению данных, обеспечению параллельного доступа к ним, их целостности и защиты. Для этой цели обычно используются готовые системы
11.6.8.4. Пара клиент/сервер
11.6.8.4. Пара клиент/сервер Пара клиент/сервер подобна паре драйвер/ядро, за исключением того, что часть ядра является запущенным в фоновом режиме демоном, от которого не требуется интерактивная работа и наличие собственного пользовательского интерфейса. Обычно демон
11.6.8.4. Пара клиент/сервер
11.6.8.4. Пара клиент/сервер Пара клиент/сервер подобна паре драйвер/ядро, за исключением того, что часть ядра является запущенным в фоновом режиме демоном, от которого не требуется интерактивная работа и наличие собственного пользовательского интерфейса. Обычно демон
2.2.9.1 Взаимодействие клиент-сервер
2.2.9.1 Взаимодействие клиент-сервер Продукты INFORMIX построены на принципах архитектуры клиент/сервер. Это означает, что сервер INFORMIX-OnLine DS выполняется на одном компьютере, а клиентские приложения выполняются на других компьютерах, связанных с сервером сетью. При этом от
Клиент-сервер
Клиент-сервер Средства локального доступа.* Локальная заглушка TCP/IP. Для многоуровневых серверных приложений и других клиентов доступ к локальному серверу на любой поддерживаемой платформе осуществляется через протокол TCP/IP: даже при отсутствии сетевой карты соединение
ГЛАВА 5. Введение в архитектуру клиент-сервер.
ГЛАВА 5. Введение в архитектуру клиент-сервер. Обычно система клиент-сервер является парой программных модулей, разработанных для связи друг с другом через сеть посредством согласованного протокола. Клиентский модуль отправляет запросы через сеть слушающей программе
Динамические приложения клиент-сервер
Динамические приложения клиент-сервер Во время выполнения программы приложениям часто бывают нужны операторы SQL, которые создаются или изменяются приложениями или вводятся пользователями. Приложения обычно предоставляют пользователю списки выбора, извлекаемые из
XSLT в архитектуре клиент-сервер
XSLT в архитектуре клиент-сервер Многие из систем, применяющих XSLT, так или иначе, сводятся к клиент- серверной архитектуре, в которой клиент делает запрос, а сервер в качестве ответа возвращает некоторые данные. XSLT в таких решениях может использоваться для приведения
ГЛАВА 1 ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ АРХИТЕКТУРЫ КЛИЕНТ/СЕРВЕР В СИСТЕМЕ SAP R/3
ГЛАВА 1 ТЕХНИЧЕСКАЯ РЕАЛИЗАЦИЯ АРХИТЕКТУРЫ КЛИЕНТ/СЕРВЕР В СИСТЕМЕ SAP R/3 Базовая технология SAP, давно известная как SAP R/3 Basis, показала себя надежной платформой благодаря своей высокопроизводительной архитектуре. Сервер приложений Web SAP (Web AS - Web Application Server) является поэтому