Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых

Локальные сети персональных компьютеров. Работа с сервером Novell NetWare

© Александр Фролов, Григорий Фролов
Том 4, М.: Диалог-МИФИ, 1993, 168 стр.

[Назад] [Содеожание] [Дальше]

2.3. Создание канала с файл-сервером

Каналы, создаваемые между сетевыми оболочками рабочих станций и файл-серверами, похожи на каналы, создаваемые протоколом SPX (или протоколом NETBIOS). Однако для повышения производительности эти каналы сделаны на базе протокола IPX, а не на базе протокола SPX, как это можно было бы предположить.

И сервер, и каждая рабочая станция имеют таблицы номеров каналов, в которых находятся различные характеристики партнеров, такие, как имена или сетевые адреса. Таблица каналов рабочей станции содержит 8 элементов, поэтому каждая рабочая станция может подключиться не более чем к 8 различным серверам. Размер таблицы каналов файл-сервера может меняться в зависимости от версии операционной системы Novell NetWare в пределах от 5 до 250. Этот размер определяет максимальное количество пользователей, которые могут подключиться к файл-серверу.

Подробно формат таблицы номеров каналов и других таблиц сетевой оболочки мы рассмотрим в разделе "Отображение дисков рабочей станции" этой главы. Сейчас для нас важно, что при создании канала с файл-сервером в таблице номеров каналов появляется новая запись. При уничтожении канала соответствующая запись также удаляется.

Для создания канала с файл-сервером следует использовать функцию AttachToFileServer(), определенную в библиотеке Novell NetWare C Interface следующим образом:

int AttachToFileServer(char *ServerName, WORD *ConnectionID);


Функции надо передать указатель на текстовую строку с именем файл-сервера и адрес переменной типа WORD, в которую будет записан номер созданного канала. При успешном создании канала функция возвращает нулевое значение, в противном случае - код ошибки:

Код ошибки Значение
0xF8 Рабочая станция уже подключена к этому серверу
0xF9 Нет места в таблице номеров каналов рабочей станции
0xFA Нет места в таблице номеров каналов сервера
0xFC Сервера с указанным именем нет в сети
0xFE База объектов сервера заблокирована
0xFF Сервер не отвечает на запрос

Для уничтожения канала вы можете использовать функцию DetachFromFileServer():

void DetachFromFileServer(WORD ConnectionID);


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

Таким образом, все, что вам нужно знать для создания канала с файл-серве-
ром, - это имя файл-сервера. Пользователь может ввести имя нужного файл-сервера, спросив его у супервизора. Однако вы можете предоставить пользователю меню активных файл-серверов. Для получения меню можно воспользоваться методикой обнаружения файл-серверов, изложенной нами ранее и основанной на протоколе SAP. Соответствующая программа, иллюстрирующая использование SAP-протокола, приведена дальше в разделе "Программа SLIST" этой главы.

Заметим, что сетевая оболочка сразу после своего запуска создает канал с ближайшим файл-сервером. Этот файл-сервер становится первичным (Primary).

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

Кроме того, существует понятие предпочтительного (Preferred) файл-сервера. Этот сервер должен быть задан явно специальной функцией.

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

В библиотеке NetWare C Interface есть несколько функций, позволяющих определить номера каналов первичного, текущего и предпочтительного сервера, задать предпочтительный сервер и изменить первичный сервер.

Функция GetPrimaryConnectionID() возвращает номер канала первичного сервера:

WORD GetPrimaryConnectionID(void);


Функция GetDefaultConnectionID() возвращает номер канала для текущего сервера:

WORD GetDefaultConnectionID(void);


Функция GetPreferredConnectionID() возвращает номер канала предпочтительного сервера или 0, если предпочтительный сервер не был задан.

Напомним, что номер канала соответствует индексу в таблице номеров каналов и лежит в пределах от 1 до 8.

Функция SetPreferredConnectionID() предназначена для определения предпочтительного сервера. Номер канала для сервера, который должен стать предпочтительным, передается функции в качестве параметра:

void SetPreferredConnectionID(BYTE ConnectionID);


Если у вас нет библиотеки NetWare C Interface, вы можете создать канал с сервером или удалить его с помощью функции F1h прерывания INT 21h.

Перед вызовом функции вам нужно загрузить регистры следующим образом:

На входе: AH = F1h;
AL = 0 - создать канал с файл-сервером, использовать номер канала, заданный в регистре DL;

1 - отключить пользователя и удалить канал, номер которого задан в регистре DL;

2 - отключить пользователя от файл-сервера, номер канала которого задан в регистре DL;

DL = Номер канала.
На выходе: AL = Код ошибки или 0, если операция выполнена без ошибок.

При помощи функции F0h прерывания INT 21h вы сможете определить первичный и текущий сервер, а также задать новый первичный или предпочтительный сервер:

На входе: AH = F0h;
AL = 0 - установить предпочтительный файл-сервер, номер канала которого задан в регистре DL;

1 - определить текущий предпочтительный сервер, номер сервера возвращается в регистре AL;

2 - получить в регистре AL номер текущего сервера;

4 - установить первичный файл-сервер, номер канала которого задан в регистре DL;

5 - получить в регистре AL номер первичного файл-сервера;

DL = Номер канала.
На выходе: AL = Код ошибки или 0, если операция выполнена без ошибок.
[Назад] [Содеожание] [Дальше]