ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава

рес, № порта и т.д.);

sockaddrlen - размер параметра sockaddr в б.

Разглядим структуру sockaddr более тщательно:

struct sockaddr

{

u_short sa_family;

char sa_data[14];

};

1-ый элемент структуры обозначает протокол, 2-ой - специфичное для про-

токола значение. К примеру версия данной структуры для Internet (sockaddr_in) будет

иметь последующий вид:

struct sockaddr_in

{

short ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава sin_family; //AF_INET

u_short sin_port;

struct sin_addr; //4-х байтовый Айпишник

char sin_zero[8];

};

Элемент sin_addr представляет собой четырехбайтовый Айпишник (к примеру 127.0.0.1).

Для преобразования данной строчки в требуемую форму употребляется функция

inet_addr(), которая будет рассмотрена дальше.

Для установления связи со стороны клиента употребляется функция connect:

error = connect(s ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава, serveraddr, serveraddrlen);

которая инициирует установление связи на узле, используя его дескриптор s и информа-

цию из структуры serveraddr, которая содержит адресок сервера и номер порта на который

нужно установить связь. Если гнездо не было связано с адресом, connect автоматом

вызовет системную функцию bind.

Функция connect возвращает 0, если вызов прошел удачно. Возвращенная вели-

чина ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава -1 показывает на то, что в процессе установления связи произошла некоторая ошибка. В

случае удачного вызова функции процесс может работать с дескриптором узла, ис-

пользуя функции read и write, и закрывать канал используя функцию close.

Со стороны сервера процесс установления связи труднее. Когда сервер вожделеет

предложить один из собственных сервисов, он связывает ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава узел с общеизвестным адресом, ассо-

циирующимся с данным обслуживанием, и пассивно слушает этот узел. Для этих целей ис-

пользуется системный вызов listen:

error = listen(s, qlength);

где s это дескриптор узла, а qlength это наибольшее количество запросов на установ-

ление связи, которые могут стоять в очереди, ждя обработки сервером; это количест-

во может ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава быть ограничено особенностями системы.


Когда сервер получает запрос от клиента и воспринимает решение об установлении

связи, он делает новый узел и связывает его с ассоциацией, эквивалентной "узлу в ре-

жиме ожидания". Для Internet домена это значит тот же самый номер порта. Для этой

цели употребляется системный вызов accept:

newsock = accept(s ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава, clientaddr, clientaddrlen);

Узел, ассоциированный клиентом, и узел, который был возвращен функцией

accept, употребляются для установления связи меж сервером и клиентом.

Когда связь установлена, при помощи разных функций может начаться процесс

передачи данных. При наличии связи, юзер может посылать и получать сообще-

ния при помощи функций read и write:

write(s ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава, buf, sizeof(buf));

read(s, buf, sizeof(buf));

Вызовы send и recv фактически схожи read и write, кроме того, что

добавляется аргумент флагов.

send(s, buf, sizeof(buf), flags);

recv(s, buf, sizeof(buf), flags);

Могут быть указаны один либо более флагов при помощи ненулевых значений, таких, как

последующие:

MSG ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава_OOB - Посылать/получать данные, соответствующие для гнезд типа stream.

MSG_PEEK - Просматривать данные без чтения. В данном случае данные посылаются

юзеру, но сами помечаются как "непрочитанные". Последующий read либо recv

вызванный на данном узле возвратит прочитанные в прошедший раз данные.

MSG_DONTROUTE - посылать данные без маршрутизации пакетов. (Употребляется

только процессами, управляющими таблицами маршрутизации.)

Закрытие узла делается последующим ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава образом. Если узел больше не использу-

ется, процесс может закрыть его при помощи функции close, вызвав ее с соответствую-

щим дескриптором узла:

close(s);

Если данные были ассоциированы с узлом, обещающим доставку (тип stream), сис-

тема будет пробовать выполнить передачу этих данных. Все же, по истечении

достаточно долгого промежутка ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава времени, если данные все еще не доставлены, они

будут отброшены. Если пользовательский процесс вожделеет немедля закончить лю-

бую передачу данных, он в состоянии сделать это при помощи вызова shutdown на данном узле

для его закрытия. Формат вызова последующий [12]:

shutdown(s, how);

где how имеет одно из последующих значений:

• 0 - если ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава юзер больше не вожделеет читать данные

• 1 - если данные больше не будут посылаться

• 2 - если данные не будут ни посылаться ни получаться

Функциипреобразованияданных. Другой набор функций интерфейса Winsock

связан с преобразованием данных из Сетевого формата в формат базисного компьютера и

в оборотном направлении (табл.8.2). Эти функции рекомендуется использовать даже в том


случае, если формат данных схож на обоих компьютерах ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава, так как они делают

программный код отлично совместимым и просто переносимым.

Таблица 8.2


Функция

htonl

htons

inet_addr

inet_ntoa

ntohl

ntohs


Во что конвертирует

32-разрядное значение из базисного формата в сетевой формат TCP/IP

16-разрядное значение из базисного формата в сетевой формат TCP/IP

Строчку Айпишники с точками в длинноватое целое без знака

Сетевой адресок, представленный в виде длинноватого целого без ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава знака, в

строчку Айпишника с точками

32-разрядное значение из сетевого формата TCP/IP в базисный формат

16-разрядное значение из сетевого формата TCP/IP в базисный формат


Функциипросмотрабазданных. Другой, наименьший набор функций интерфейса

Winsock состоит из функций просмотра баз данных. Эти функции (их перечень приведен в

табл.8.3) созданы для поиска Айпишников, доменных имен, идентификаторов сер-

висов ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава и номеров портов протоколов. Функции просмотра баз данных почти во всем работа-

ют подобно своим Unix-аналогам. На каждом базисном компьютере содержится инфор-

мация о сервисах и, обычно, маленький перечень доменных имен и Айпишников. Эти

данные обычно записываются в два текстовых файла, а конкретно HOSTS и SERVICES, и

функции работы с гнездами ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава употребляют их в качестве начальной инфы об адресах

либо номерах сервисов.

Таблица 8.3


Функция

gethostbyaddr

gethostbyname

gethostname

getpeername

getprotobyname


Что возвращает

Информацию о базисном компьютере по данному адресу

Информацию о базисном компьютере по данному имени узла

Стандартное базисное имя локального компьютера

Адресок однорангового узла, присоединенного к данному гнезду

Информацию о данном протоколе (по его имени)


getprotobynumber Информацию о протоколе


getservbyname

getservbyport

getsockname

getsockopt


Информацию о сервисе ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава по данному имени сервиса и протоколу

Информацию о сервисе по данному имени, порта и протоколу

Локальное имя данного гнезда

Текущее значение обозначенного параметра гнезда


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

ютер (Windows 98, Windows NT либо Unix), файл HOSTS содержит базисные адреса и

имена компов, приведенные попарно, а файл SERVICES хранит информацию о

"фаворитных ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава" сервисах, в том числе надлежащие номера портов, список исполь-

зуемых низкоуровневых протоколов и необязательные псевдонимы. В Windows 98 эти

файлы находятся в папке \WINDOWS, а в Windows NT - в папке

\WINNT\SYSTEM32\DRIVERS\ETC.

Ниже приведен кусок стандартного файла SERVICES, взятого с рабо-

чей станции Windows. Направьте внимание, что ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава в каждой записи обозначено имя сервиса,

номер порта и тип протокола, также один либо несколько дополнительных (необяза-

тельных) псевдонимов [12].

# Copyright (с) 1993-1995 Microsoft Corp. #

# Этот файл содержит номера портов для фаворитных сервисов, данных

# в согласовании со эталоном RFC 1060

#



# Формат:

#

# / [псевдонимы...] [#] #

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

systat 11/tcp

systat 11/tcp users

daytime 13/ftcp

daytime 13/udp

netstat ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава 15/tcp

qotd 17/top quote

qotd 17/udp quote

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp

ftp 21/tcp

telnet 23/tcp

amtp 25/tcp mail

time 37/tcp timserver

time 37/udp timserver

rip 39/udp resource

name 42/tcp nameserver

name 42/udp nameserver

whois 43/tcp nicname

domain 53/tcp nameserver # сервер доменных имен

domain 53/udp nameserver

nameserver 53/tcp domain # сервер доменных имен

nameserver 53/udp domain

mtp 57/tcp # использовать не рекомендуется

bootp ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава 67/udp # сервер программки загрузки

tftp 69/udp

rje 77/tcp netrjs

finger 79/tcp

link 87/tcp ttylink,

supdup 95/tcp

hostnames 101/tcp hostname

iso-tsap 102/tcp

dictionary 103/tcp webster

x400 103/tcp # ISO-почта

x400-snd 104/tcp

csnet-ns 105/tcp

pop 109/tcp postoffice

pop2 109/tcp # почтовая служба

pop3 110/tcp postoffice

Ниже представлен пример обычного содержимого файла HOSTS. Этот файл

обычно имеет сравнимо малый размер, так как большая часть имен переносится

на ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава сервер DNS (сервер доменных имен).


# Файл HOSTS, применяемый в TCP/IP

102.54.94.97 rhino.acme.com # начальный сервер

38.25.63.10 х.acme.corn # сервер клиента х

127.0.0.1 localhost

В этом файле каждый Айпишник соответствует имени базисного компьютера. Обрати-

те внимание на стандартный адресок 127.0.0.1, соответственный локальному базисному

компу. (Согласно принятой договоренности, адресок 127.0.0.1 всегда показывает

на сам локальный базисный компьютер.) В современных Windows ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава обычно еще имеется

файл LMHOSTS. Он служит для тех же целей, что и файл HOSTS, но данные

тут базисные имена являются NetBIOS-именами. Не считая того, в этом файле могут ис-

воспользоваться ключевики, не используемые в файле HOSTS (к примеру, ключевое

слово #DOM позволяет задать контролер домена сети Windows NT ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава).

Время от времени поиск адреса сводится к обычному просмотру соответственной записи в

файле HOSTS, но в большинстве случаев запрос в поисковике передается на DNS-сервер, который ли-

бо удовлетворяет этот запрос, или передает его далее, DNS-серверу первого уровня.

Если разыскиваемая запись не найдена на сервере первого уровня, запрос ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава передается сле-

дующему по иерархии DNS-серверу. Этот процесс длится до того времени, пока иско-

мая запись не будет найдена либо пока не завершится процесс поиска (в последнем

случае появится сообщение об ошибке).

Асинхронныеверсиифункцийинтерфейса Winsock. Для программирования

асинхронных гнезд в Windows рекомендуется использовать WSA-версии функций рабо-

ты с гнездами, которые в качестве ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава параметра обычно принимают значение дескриптора

окна и по окончании выполнения (либо по мере надобности передачи инфы при-

ложению) записывают в очередь сообщений этого окна данные о статусе операции либо

сообщение о окончании ее выполнения. Так как Windows поддерживает одновре-

менную работу нескольких потоков, можно также использовать синхронные функции,

создавая для их отдельный ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава поток и освобождая основное приложение для обработки

других задач на время выполнения этих функций. Перечень асинхронных функций приве-

ден в табл.8.4 [12].

Таблица 8.4


WSAAccept


Функция


Выполняемое действие

Зависимо от определенных критерий регист-

рирует соединение и делает группу гнезд либо

подключается к имеющейся группе


WSAAddressToString

WSAAsyncGetHostByAddr

WSAAsyncGetHostByName

WSAAsyncGetProtoByName

WSAAsyncGetProtoByNumber

WSAAsyncGetServByName


Конвертирует все адреса, находящиеся в струк-

туре SOCKADDR, в представление ГЛАВА 8. ТЕХНОЛОГИИ ОБМЕНА ИНФОРМАЦИЕЙ В ОС WINDOWS 5 глава, комфортное для

восприятия человеком

Получает информацию о базисном компьютере по

данному адресу

Получает информацию о базисном компьютере по

данному имени

Получает информацию о данном протоколе по

его имени

Получает информацию о данном протоколе по

его номеру

Продолжение табл. 8.4

Получает информацию о сервисе по данному

имени сервиса и протоколу




glava-87-osushestvlenie-prava-na-nasledovanie-kodeks-vveden-v-dejstvie-s-1-yanvarya-2004-goda.html
glava-873-polnij-kontrol.html
glava-882-tajnoe-proniknovenie-v-stolicu.html