Взаимодействие WS в ЛВС и ГВС похоже на работу с файлами в программе:
Файловая операция | Эквивалент IPX |
Open | OpenSocket |
Read | ListenforPacket |
Write | SendPacket |
Seek | ------------- |
Close | CloseSocket |
Управлять взаимодействием WS – WS в программе можно используя набор функций (системных вызовов), которые предоставляются драйвером IPX в дополнение к обычным функциям DOS.
Для работы в IPX используется следующая последовательность действий:
Станция А | Станция В |
OpenSocket | OpenSocket |
Get network address of B | Get network address of A |
Send packet to B | Recieve data packet |
Receive data packet | Send data packet |
Close socket | Close 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:
Поле | Рамзер | Назначение |
Link | 4 | Указатель на следующий ECB |
ESKAddress | 4 | Адрес программы ESK |
Thuse | 1 | Флаг состояния ECB |
CCode | 1 | Код завершения запроса |
Socket | 2 | Socket для приема или передачи |
IPXWorkSpace | 4 | Рабочий буфер для IPX |
DriverWorkSpace | 5 | Рабочий буфер для драйвера адаптера |
TMMAddress | 5 | Адрес для передачи пакета |
FragmentCnt | 2 | Количество фрагментов в пакете |
Address | 4 | Адрес фрагмента |
Size | 2 | Размер фрагмента |