- •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 Вывод
Функции для работы с сетевыми адресами
IpxGetLocalTaget
На входе: |
BX |
= |
02h. |
|
ES:SI |
= |
Указатель на буфер длиной 12 байт, содержащий полный сетевой адрес станции, на которую будет послан пакет. |
|
ES:DI |
= |
Указатель на буфер длиной 6 байт, в который будет записан непосредственный адрес, т. е. адрес той станции, которой будет передан пакет. Это может быть адрес моста. |
На выходе: |
AL |
= |
Код завершения: 00h - непосредственный адрес был успешно вычислен; FAh - непосредственный адрес вычислить невозмож- но, так как к указанной станции нет ни одного пути доступа по сети. |
|
CX |
= |
Время пересылки пакета до станции назначения (только если AL равен нулю) в тиках системного таймера. Тики таймера следуют с периодом примерно 1/18 секунды. |
Функция применяется для вычисления значения непосредственного адреса, помещаемого в поле ImmAddress блока ECB перед передачей пакета.
Так как станция-получатель может находиться в другой сети, прежде чем достигнуть цели, пакет может пройти один или несколько мостов. Поле непосредственного адреса ImmAddress блока ECB должно содержать либо адрес станции назначения (если передача происходит в пределах одной сети), либо адрес моста (если пакет предназначен для рабочей станции, расположенной в другой сети). Используя указанный в буфере размером 12 байт полный сетевой адрес, состоящий из номера сети, адреса станции в сети и сокета приложения, функция IPXGetLocalTaget вычисляет непосредственный адрес, т. е. адрес той станции в данной сети, которая получит передаваемый пакет.
Если программа-сервер принимает пакеты от клиентов и возвращает клиентам свои пакеты, нет необходимости пользоваться функцией IPXGetLocalTaget для заполнения поля ImmAddress блока ECB перед отправкой ответа станции-клиенту. Когда от клиента приходит пакет, в поле ImmAddress блока ECB автоматически записывается непосредственный адрес станции (или моста), из которой пришел пакет. Поэтому для отправки ответного пакета можно воспользоваться тем же самым ECB с уже проставленным значением в поле ImmAddress.
IpxGetInternetworkAddress
На входе: |
BX |
= |
09h. | |
|
ES:DI |
= |
Указатель на буфер длиной 10 байт; в него будет записан адрес станции, на которой работает данная программа. Адрес состоит из номера сети Network и адреса станции в сети Node. | |
|
ES:DI |
= |
Указатель на буфер длиной 10 байт; в него будет записан адрес станции, на которой работает данная программа. Адрес состоит из номера сети Network и адреса станции в сети Node. |
|
На выходе: |
|
|
Регистры не используются. |
|
С помощью этой функции программа может узнать сетевой адрес станции, на которой она сама работает. Полученный адрес программа может затем использовать по своему усмотрению (например, сообщить его другой станции).
Формат буфера аналогичен представленному на рис. 4, за исключением того, что в буфер не записывается сокет. Считается, что сокет программа знает, так как она его открывала.