- •1 Протоколы xns. 2
- •1.1 Основы технологии
- •1.2 Сетевой уровень
- •2 Протоколipx
- •2.1 Основы технологии
- •2.2 Программирование дляIpx
- •2.2.1 Формат пакета ipx
- •2.2.2 Работа с драйвером ipx/spx
- •Точка входа api драйвера ipx/spx
- •Инициализация сервера и клиента
- •Прием и передача пакетов данных
- •2.2.3 Формат блока ecb
- •2.2.4 Основные функции api драйвера ipx
- •Функции для работы с сокетами
- •IpxOpenSocket
- •IpxCloseSocket
- •Функции для работы с сетевыми адресами
- •IpxGetLocalTaget
- •IpxGetInternetworkAddress
- •Прием и передача пакетов
- •IpxListenForPacket
- •IpxSendPacket
- •IpxRelinquishControl
- •IpxDisconnectFromTaget
- •Функции aes
- •IpxScheduleIpxEvent
- •IpxGetIntervalMarker
- •IpxCancelEvent
- •IpxRelinquishControl
- •3 Протоколspx
- •3.1 Формат пакета spx
- •3.2 Функции spx
- •3.2.1 Инициализация spx spxCheckInstallation
- •3.2.2 Образование канала связи spxListenForConnection
- •SpxEstablishConnection
- •3.2.3. Прием и передача пакетов spxListenForSequencedPacket
- •SpxSendSequencedPacket
- •3.2.4 Разрыв канала связи spxTerminateConnection
- •SpxAbortConnection
- •3.2.5. Проверка состояния канала spxGetConnectionStatus
- •4 Вывод
3.2 Функции spx
3.2.1 Инициализация spx spxCheckInstallation
На входе: |
BX |
= |
10h. |
|
AL |
= |
00h. |
На выходе: |
AL |
= |
Код завершения: 00h - SPX не установлен; FFh - SPX установлен. |
|
BH |
= |
Верхний (major) номер версии SPX. |
|
BL |
= |
Нижний (minor) номер версии SPX. |
|
CX |
= |
Максимальное количество каналов SPX, поддерживаемых драйвером SPX. |
|
DX |
= |
Количество доступных каналов SPX. |
Прежде чем использовать функции SPX, программа должна вызвать функцию SPXCheckInstallation для того, чтобы убедиться в наличии драйвера SPX.
3.2.2 Образование канала связи spxListenForConnection
На входе: |
BX |
= |
12h. |
|
AL |
= |
Счетчик повторов попыток создать канал связи. |
|
AH |
= |
Флаг включения системы периодической проверки связи (Watchdog Supervision Required Flag). |
|
ES:SI |
= |
Указатель на блок ECB. |
На выходе: |
|
|
Регистры не используются. |
Эта функция используется в паре с функцией SPXEstablishConnection для образования канала связи.
Программа-сервер вызывает SPXListenForConnection, передавая ей адрес блока ECB. Этот блок будет использован для образования канала связи. Когда программа-клиент вызовет функцию SPXEstablishConnection, произойдет образование канала связи и в поле InUse блока ECB будет записано нулевое значение. Будет также вызвана соответствующая программа ESR, если задан ее адрес.
В блоке ECB необходимо определить значение поля ESRAddress и указать номер сокета. Для каждого сокета вы можете образовать несколько каналов.
Блок ECB, адрес которого задан в регистрах ES:SI, ставится драйвером SPX во внутреннюю очередь блоков ECB, ожидающих прихода пакетов от функций SPXEstablishConnection, выдаваемых другими станциями, желающими образовать канал связи.
После образования канала связи, когда в поле InUse будет записано нулевое значение, поле CCode блока ECB будет содержать код завершения:
00 |
канал связи создан, ошибок нет; |
FFh |
указанный в ECB сокет не был открыт; |
FCh |
запрос SPXListenForConnection был отменен функциями IPXCancelEvent или IPXCloseSocket (ESR не вызывается); |
EFh |
переполнилась внутренняя таблица номеров каналов связи; до тех пор, пока какой-нибудь канал не будет закрыт, вы не сможете образовать новые каналы. |
Перед вызовом функции SPXListenForConnection программа должна выделить хотя бы один ECB для приема SPX-пакета. Это нужно сделать при помощи функции SPXListenForSequencedPacket (см. ниже описание функции).
Вам также надо задать в регистре AL cчетчик повторов попыток создания канала связи и в регистре AH - флаг включения системы периодической проверки связи. Вы можете задать от 1 до 255 попыток или использовать значение по умолчанию, если запишете в регистр AL нулевое значение.
Если в регистр AH будет записано ненулевое значение, драйвер SPX будет периодически проверять работоспособность канала связи, передавая специальные тестовые пакеты. Если канал вдруг перестает работать, он разрывается и в ECB, подготовленный для приема пакетов функцией SPXListenForSequencedPacket, в поле InUse проставляется нулевое значение. Поле CCode при этом будет содержать код ошибки EDh, а номер "испорченного" канала будет записан в первых двух байтах поля IPXWorkspace блока ECB.