Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 9 лет назад пользователемВладимир Бледнов
1 ПАРАМЕТРЫ СОКЕТА Методическое пособие по дисциплине «Программное обеспечение компьютерных сетей и информационных систем»
2 Перед использованием сокета необходимо задать его параметры, для чего следует подготовить структуру типа sockaddr, определение которой помещено ниже
3 Для работы с адресами в формате InterNet используется другой вариант этой структуры, в котором детализируется формат поля sa_data
4 Поле sin_family Поле sin_family определяет тип адреса. Следует записать в это поле значение AF_INET, которое соответствует типу адреса, принятому в InterNet (структура srv_address имеет тип SOCKADDR_IN) srv_address.sin_family = AF_INET;
5 Поле sin_port Поле sin_port определяет номер порта, который будет использоваться для передачи данных. Порт - это просто идентификатор программы, выполняющей обмен по сети. На одном узле может одновременно работать несколько программ, использующих разные порты.
6 Особенностью поля sin_port Особенностью поля sin_port является использование так называемого сетевого формата данных. Этот формат отличается от того, что принят в процессорах с архитектурой Intel, а именно - младшие байты данных хранятся по старшим адресам памяти (архитектура процессоров Intel подразумевает хранение старших байтов данных по младшим адресам).
7 Cетевой формат Cетевой формат данных удобен при организации глобальных сетей, так как в узлах такой сети могут использоваться компьютеры с различной архитектурой.
8 Специальный набор функций интерфейса Windows Socket Для выполнения преобразований из обычного формата в сетевой и обратно в интерфейсе Windows Socket интерфейсе Windows Socket предусмотрен специальный набор функций. В частности, для заполнения поля sin_port нужно использовать функцию htons, выполняющую преобразование 16-разрядных данных из формата Intel в сетевой формат.
9 Инициализация поля sin_port в приложении SERVER Ниже показано, как инициализируется поле sin_port в приложении SERVER
10 Поле sin_addr структуры sockaddr_in представляет собой структуру in_addr
11 Инициализация сокета При инициализации сокета в этой структуре следует указать адрес IР (32- битовое уникальное число, идентифицирующее данный компьютер, с которым будет работать данный сокет. Если сокет будет работать с любым адресом (например, создается сервер, который будет доступен из узлов с любым адресом).
12 Адрес для сокета может быть указан следующим образом srv_address.sin_addr.s_addr = INADDR_ANY;
13 В том случае, если сокет будет работать с определенным IP-адресом (например, создается приложение- клиент, которое будет обращаться к серверу с конкретным адресом IP), в указанную структуру необходимо записать реальный IP-адрес.
14 Датаграммный протокол UDP позволяет посылать пакеты данных одновременно всем рабочим станциям в широковещательном режиме. Для этого необходимо указать адрес как INADDR_BROADCAST.
15 Если известен адрес в виде четырех десятичных чисел, разделенных точкой (именно так его может вводить пользователь), то можно заполнить поле адреса при помощи функции inet_addr (структура dest_sin имеет тип SOCKADDR_IN) dest_sin.sin_addr.s_addr = inet_addr(" ");
16 В случае ошибки В случае ошибки функция возвращает значение INADDR_NONE, что и следует использовать для проверки.
17 Обратное преобразование адреса IP в текстовую строку Обратное преобразование адреса IP в текстовую строку можно при необходимости легко выполнить с помощью функции inet_ntoa, имеющий следующий прототип char FAR * inet_ntoa(struct in_addr in); При ошибке эта функция возвращает NULL.
18 Работа с доменными именами, применяя сервер DNS или файл HOSTS Однако чаще всего пользователь работает с доменными именами, применяя сервер DNS или файл HOSTS В этом случае следует воспользоваться функцией gethostbyname, возвращающей адрес IP, а затем записать полученный адрес в структуру sin_addr
20 В случае ошибки функция gethostbyname возвращает NULL, после чего причину ошибку можно выяснить путем проверки кода возврата функцией WSAGetLastError.
21 Если указанный адрес найден в базе DNS или файле HOSTS (см. подраздел 7.1.1), функция gethostbyname возвращает указатель на структуру hostent, описанную ниже
22 Искомый адрес Искомый адрес находится в первом элементе списка h_addr_list[0], на который можно также ссылаться при помощи h_addr, длина поля адреса находится в поле h_length.
23 ПРИВЯЗКА АДРЕСА К СОКЕТУ После подготовки структуры SOCKADDR (записи в нее параметров сокета - в частности, адреса) следует привязку адреса к сокету при помощи функции bind int bind(SOCKET sock, const struct sockaddr FAR *addr, int namelen);
24 Параметр sock содержит дескриптор созданного ранее функцией socket сокета, в поле addr следует записать указатель на подготовленную структуру SOCKADDR, в поле namelen - размер этой структуры.
25 В случае ошибки функция bind возвращает значение SOCKET_ERROR, дальнейший анализ причин ошибок следует выполнять при помощи функции WSAGetLastError, возможные коды ошибок перечислены ниже
26 Пример вызова функции bind показан ниже
28 Литература 1. Чепмен Д. и др. Разработка InterNet-приложений в DELPHI 2. -Киев.:DiaSoft, c. 2. Елманова Н.З. Borland C++Builder (архитектура клиент/сервер, многозвенные системы, InterNet- приложения). -M.: Диалог-МИФИ, c. 3. Зайцев С.С. Описание и реализация протоколов сетей ЭВМ. -М.: Наука, c. 4. Клейнрок Л. Вычислительные системы с очередями. Пер. с англ. -М.: Мир, c. 5. Фролов А.В., Фролов Г.В. Локальные сети персональных компьютеров(монтаж сети, установка программного обеспечения). Библиотека системного программиста, т.7. M.: Диалог-МИФИ, c.
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.