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 для закрытия соединения.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Вызовы syscall
Вызовы syscall Системные вызовы (часто называемые syscall в ОС Linux) обычно реализуются в виде вызова функции. Для них могут быть определены один или более аргументов (inputs), которые могут приводить к тем или иным побочным эффектам[25], например к записи данных в файл или к
Методы клиентской оптимизации веб-страниц
Методы клиентской оптимизации веб-страниц Сайт тормозит, и вы не представляете, как с этим справиться? Количество анимации на странице превысило все мыслимые и немыслимые границы, и вы не знаете что делать? На странице десятки и сотни картинок, дизайнер превзошел сам
9.2. Системные вызовы
9.2. Системные вызовы В этой книге практически повсеместно упоминаются системные вызовы, которые являются фундаментальными для программного окружения. На первый взгляд, они выглядят как обычные вызовы функций С. И это не случайно; они представляют собой специальную
Получение размеров Web-страницы и клиентской области окна Web-обозревателя
Получение размеров Web-страницы и клиентской области окна Web-обозревателя Также часто бывает нужно узнать размеры всей Web-страницы и внутренней части окна Web-обозревателя, в которой выводится содержимое Web-страницы (клиентской области окна). Для этого предназначены методы
Отложенные вызовы
Отложенные вызовы Отложенный вызов определяет функцию, вызов которой будет произведен ядром системы через некоторое время. Например, в SVR4 любая подсистема ядра может зарегистрировать отложенный вызов следующим образом:int co_ID = timeout(void (*fn)(), caddr_t arg, long delta);где fn() определяет
Получение размеров Web-страницы и клиентской области окна Web-обозревателя
Получение размеров Web-страницы и клиентской области окна Web-обозревателя Также часто бывает нужно узнать размеры всей Web-страницы и внутренней части окна Web-обозревателя, в которой выводится содержимое Web-страницы (клиентской области окна). Для этого предназначены методы
21.6.1 Вызовы в серверной программе TCP
21.6.1 Вызовы в серверной программе TCP 1. sockMain = socket (AF_INET, SOCK_STREAM, 0); Вызов socket имеет форму:дескриптор_socket = socket(адрес_домена, тип_коммуникации, протокол)Напомним, что интерфейс socket может использоваться для других видов коммуникаций, например XNS. AF_INET указывает на семейство
21.10.1 Вызовы в серверной программе UDP
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
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 заполнена введенными конечным пользователем
Регистрация TCP/IP-сервиса при клиентской установке
Регистрация TCP/IP-сервиса при клиентской установке Обычно клиент и сервер InterBase, будучи на разных компьютерах, связываются по протоколу TCP/IP. Чтобы получить возможность общаться по TCP/IP, необходимо серверу InterBase поставить в соответствие порт, по котором} клиент будет
Разработка клиентской программы
Разработка клиентской программы Разработка формы Создайте новый проект Delphi. Присвойте свойству Caption формы заголовок Remote Mouse. Разместите на форме компонент Label категории Standard и присвойте его свойству Caption значение Port. Справа от этой метки разместите компонент Edit
5.5.2. Системные вызовы
5.5.2. Системные вызовы Сокеты являются более гибкими в управлении, чем рассмотренные выше механизмы межзадачного взаимодействия. При работе с сокетами используются следующие функции:? socket() — создает сокет;? close() — уничтожает сокет;? connect() — устанавливает соединение
Список имен и размещение клиентской библиотеки
Список имен и размещение клиентской библиотеки В табл. 7.1 представлены имена клиентской библиотеки и размещение по умолчанию на клиентах Firebird.Таблица 7.1. Имена и размещение по умолчанию клиентов Firebird Версия, вид ОС клиента Библиотека Размещение по
2.4. Генерация кода клиентской части с помощью ERwin
2.4. Генерация кода клиентской части с помощью ERwin 2.4.1. Расширенные атрибуты ERwin поддерживает не только проектирование сервера БД, но и автоматическую генерацию клиентского приложения в средах разработки MS Visual Basic и Power Builder. Технология генерации состоит в том, что на этапе
Закон 1. Невозможно обеспечить безопасность клиентской части
Закон 1. Невозможно обеспечить безопасность клиентской части В первом законе безопасности следует определить пару понятий. Что именно имеется в виду, когда говорят о клиентской части (client-side)? Рассматривая сетевое (клиент-серверное) окружение, авторы определили бы