21.7.1 Вызовы в клиентской программе TCP

21.7.1 Вызовы в клиентской программе TCP

1. sock = socket(AF_INET, SOCK_STREAM, 0);

Клиент создает блок управления пересылкой ("socket") так же, как это делал сервер.

2. Сервер должен инициализировать адресную структуру для использования в bind.

Эта структура содержит локальный IP-адрес и номер порта сервера. Клиент также инициализирует адресную структуру, хранящую те же сведения. Эта структура будет использоваться в вызове connect для указания точки назначения.

Вызов bzero() помещает нули в servAddr — адресную структуру сервера. Еще раз мы трактуем семейство адресов как Интернет.

Затем нужно преобразовать введенное пользователем имя хоста в IP-адрес. Это делает функция gethostbyname, которая возвращает указатель на структуру hostent, содержащую имя сервера и IP-адрес.

Функция bcopy применяется для копирования IP-адреса (который находится в hp->h_addr) в servAddr.

Второй введенный конечным пользователем аргумент определял порт сервера. Он читался как текстовая строка ASCII, поэтому ее сначала нужно преобразовать в целое число через atoi(), а затем изменить порядок следования байт через htons(). Наконец номер порта копируется в адресную переменную из servAddr.

bzero((char *)&servAddr, sizeof(servAddr));

servAddr.sin_family = AF_INET;

hp = gethostbyname(argv[i]);

bcopy(hp->h_addr, &servAddr.sin_addr, hp->h_length);

servAddr.sin_port = htons(atoi(argv[2]));

3. connect(sock, &servAddr, sizeof(servAddr)); Вызов connect имеет форму:

connect(дескриптор_socket, адресная_структура, длина_адресной_структуры)

Клиент откроет соединение с сервером, IP-адрес и порт которого хранятся в адресной структуре.

4. send (sock, argv[3], strlen(argvs[3]), 0); Вызов send имеет форму:

возвращаемый_код = send(дескриптор_socket, буфер, длина_буфера, флаги)

Отметим, что введенный конечным пользователем третий аргумент (который появляется в программе как argv[3]) — это текст отправляемого сообщения. Обычно флаги используются для сообщения о срочных данных. В нашем случае параметры флагов установлены в 0.

5. close(sock);

Клиент выполняет close для закрытия соединения.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Методы клиентской оптимизации веб-страниц

Из книги Разгони свой сайт автора Мациевский Николай

Методы клиентской оптимизации веб-страниц Сайт тормозит, и вы не представляете, как с этим справиться? Количество анимации на странице превысило все мыслимые и немыслимые границы, и вы не знаете что делать? На странице десятки и сотни картинок, дизайнер превзошел сам


Разработка клиентской программы

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Разработка клиентской программы Разработка формы Создайте новый проект Delphi. Присвойте свойству Caption формы заголовок Remote Mouse. Разместите на форме компонент Label категории Standard и присвойте его свойству Caption значение Port. Справа от этой метки разместите компонент Edit


21.6.1 Вызовы в серверной программе TCP

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

21.6.1 Вызовы в серверной программе TCP 1. sockMain = socket (AF_INET, SOCK_STREAM, 0); Вызов socket имеет форму:дескриптор_socket = socket(адрес_домена, тип_коммуникации, протокол)Напомним, что интерфейс socket может использоваться для других видов коммуникаций, например XNS. AF_INET указывает на семейство


21.10.1 Вызовы в серверной программе UDP

Из книги BPwin и Erwin. CASE-средства для разработки информационных систем автора Маклаков Сергей Владимирович

21.10.1 Вызовы в серверной программе UDP 1. sockMain = socket(AF_NET, SOCK_DGRAM, 0);Семейство адресов — снова Интернет.2. bzero((char *)&servAddr, sizeof(servAddr));servAddr.sin_family = AF_INET;servAddr.sin_addr.s_addr = htonl(INADDR_ANY);servAddr.sin_port = 0;Вызовы инициализации адресной структуры сервера те же, что и в программе для TCP.3. bind(sockMain,


21.11.1 Запросы в клиентской программе UDP

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов. автора Дронов Владимир

21.11.1 Запросы в клиентской программе UDP 1. sock = socket(AF_INET, SOCK_DGRAM, 0); UDP клиента создает socket для UDP.2. bzero((char *)&servAddr, sizeof(servAddr));servAddr.sin_family = AF_INET;hp = gethostbyname(argv[1]);bcopy(hp->h_addr, &servAddr.sin_addr, hp->length);servAddr.sin_port = htons(atoi(argv[2]));Структура servAddr заполнена введенными конечным пользователем


2.4. Генерация кода клиентской части с помощью ERwin

Из книги HTML 5, CSS 3 и Web 2.0. Разработка современных Web-сайтов автора Дронов Владимир

2.4. Генерация кода клиентской части с помощью ERwin 2.4.1. Расширенные атрибуты ERwin поддерживает не только проектирование сервера БД, но и автоматическую генерацию клиентского приложения в средах разработки MS Visual Basic и Power Builder. Технология генерации состоит в том, что на этапе


Получение размеров Web-страницы и клиентской области окна Web-обозревателя

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Получение размеров Web-страницы и клиентской области окна Web-обозревателя Также часто бывает нужно узнать размеры всей Web-страницы и внутренней части окна Web-обозревателя, в которой выводится содержимое Web-страницы (клиентской области окна). Для этого предназначены методы


Получение размеров Web-страницы и клиентской области окна Web-обозревателя

Из книги Деловая e-mail переписка. Пять правил успеха автора Воротынцева Тамара

Получение размеров Web-страницы и клиентской области окна Web-обозревателя Также часто бывает нужно узнать размеры всей Web-страницы и внутренней части окна Web-обозревателя, в которой выводится содержимое Web-страницы (клиентской области окна). Для этого предназначены методы


9.2. Системные вызовы

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

9.2. Системные вызовы В этой книге практически повсеместно упоминаются системные вызовы, которые являются фундаментальными для программного окружения. На первый взгляд, они выглядят как обычные вызовы функций С. И это не случайно; они представляют собой специальную


Список имен и размещение клиентской библиотеки

Из книги Мир InterBase. Архитектура, администрирование и разработка приложений баз данных в InterBase/FireBird/Yaffil автора Ковязин Алексей Николаевич

Список имен и размещение клиентской библиотеки В табл. 7.1 представлены имена клиентской библиотеки и размещение по умолчанию на клиентах Firebird.Таблица 7.1. Имена и размещение по умолчанию клиентов Firebird Версия, вид ОС клиента Библиотека Размещение по


Закон 1. Невозможно обеспечить безопасность клиентской части

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

Закон 1. Невозможно обеспечить безопасность клиентской части В первом законе безопасности следует определить пару понятий. Что именно имеется в виду, когда говорят о клиентской части (client-side)? Рассматривая сетевое (клиент-серверное) окружение, авторы определили бы


Регистрация TCP/IP-сервиса при клиентской установке

Из книги Операционная система UNIX автора Робачевский Андрей М.

Регистрация TCP/IP-сервиса при клиентской установке Обычно клиент и сервер InterBase, будучи на разных компьютерах, связываются по протоколу TCP/IP. Чтобы получить возможность общаться по TCP/IP, необходимо серверу InterBase поставить в соответствие порт, по котором} клиент будет


5.5.2. Системные вызовы

Из книги Разработка ядра Linux автора Лав Роберт

5.5.2. Системные вызовы Сокеты являются более гибкими в управлении, чем рассмотренные выше механизмы межзадачного взаимодействия. При работе с сокетами используются следующие функции:? socket() — создает сокет;? close() — уничтожает сокет;? connect() — устанавливает соединение


Отложенные вызовы

Из книги автора

Отложенные вызовы Отложенный вызов определяет функцию, вызов которой будет произведен ядром системы через некоторое время. Например, в SVR4 любая подсистема ядра может зарегистрировать отложенный вызов следующим образом:int co_ID = timeout(void (*fn)(), caddr_t arg, long delta);где fn() определяет


Вызовы syscall

Из книги автора

Вызовы syscall Системные вызовы (часто называемые syscall в ОС Linux) обычно реализуются в виде вызова функции. Для них могут быть определены один или более аргументов (inputs), которые могут приводить к тем или иным побочным эффектам[25], например к записи данных в файл или к