ZuboLom.ru

Организация взаимодействия между WS с использование протокола IPX

Взаимодействие WS в ЛВС и ГВС похоже на работу с файлами в программе:

Файловая операцияЭквивалент IPX
OpenOpenSocket
ReadListenforPacket
WriteSendPacket
Seek-------------
CloseCloseSocket


Управлять взаимодействием WS – WS в программе можно используя набор функций (системных вызовов), которые предоставляются драйвером IPX в дополнение к обычным функциям DOS.


Для работы в IPX используется следующая последовательность действий:

Станция АСтанция В
OpenSocketOpenSocket
Get network address of BGet network address of A
Send packet to BRecieve data packet
Receive data packetSend data packet
Close socketClose socket

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

Необходимо создать структуру следующего вида:

Struct IPX_HEADER
{unsigned int Checksum;
unsigned char Length;
unsigned char TransportControl;
unsigned char PacketType;
unsigned char DestNetwork[4];
unsigned char DestNode[6];
unsigned int DestSocket;
unsigned char SourseNetwork[4];
unsigned char SourseNode[6];
unsigned int SourseSocket;

Для работы в IPX используют следующие функции:
IPX OpenSocket – для открытия socket’а.
IPX ListenPacket – для приема пакета.
IPX SendPacket – для посылки пакета.

Перед вызовом функции IPX SendPacket необходимо дополнительно задать еще один параметр ImmediateAddress – непосредственный адрес. Это адрес узла сети, в котором установлен мост, связывающий две сети. Нужно, если пакет направляется в другую сеть.

Мост в сети

Узнать адрес моста в сети можно с помощью функции IPX GetLocalTarget – получить локальную цель, которая возвращает адрес моста. Она возвращает адрес моста, а если его нет, то адрес станции назначения. Этот адрес затем заносится в поле непосредственного адреса блока управления событиями ECB (Event Control Block). Блок ECB – это структура данных, которая непосредственно по сети не передается, но содержит все необходимое для выполнения операций IPX. Он формируется отдельно для каждой операции IPX, которую нужно выполнить в программе. Если нужно передать пакет, то в ECB указывается адрес блока данных в ОЗУ, которые необходимо передать. При получении данных, в ECB указывается место, куда эти данные будут переданы.

Формат блока ECB:

ПолеРамзерНазначение
Link4Указатель на следующий ECB
ESKAddress4Адрес программы ESK
Thuse1Флаг состояния ECB
CCode1Код завершения запроса
Socket2Socket для приема или передачи
IPXWorkSpace4Рабочий буфер для IPX
DriverWorkSpace5Рабочий буфер для драйвера адаптера
TMMAddress5Адрес для передачи пакета
FragmentCnt2Количество фрагментов в пакете
Address4Адрес фрагмента
Size2Размер фрагмента