Компоненты IPX
                                                                        

            IPX взаимодействует с сетью через плату  драйвера  локальной
       сети, поэтому для работы он должен загружаться в память с драйве-
       ром платы локальной сети,  запрограммированным специально для ра-
       боты с IPX.  На рабочей станции и на сервере это делается по-раз-
       ному.

            Использующие IPX приложения должны особым образом  подготав-
       ливать  пакеты  и соблюдать процедуры инициации передачи данных с
       помощью IPX.  Сам пакет состоит из 30-байтового заголовка и имеет
       рекомендованный  максимум в 546 байт данных.  Для каждого запроса
       IPX требуется также создать и  инициализировать  блок  управления
       событием ECB (Event Control Block).  Иногда (обычно для обработки
       приходящих пакетов информации) требуются подпрограммы  обслужива-
       ния события ESR (Event Service Routine).

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

            Структура заголовка IPX представлена ниже.  Большинство чис-
       ловых значений в NetWare имеет  порядок  байт  "старший-младший".

            typedef struct IPXHeader {
               WORD checkSum           /* старший-младший */
               WORD length;            /* старший-младший */
               BYTE transportControl;  /* используется
                                          маршрутизаторами сети */
               BYTE packetType;        /* тип связанного с пакетом
                                          средства */
               IPXAddress destination; /* целевой адрес пакета */
               IPXAddress source;      /* исходный адрес пакета */
            }

            В структуре IPXAddress 4 байта отводится под номер  сети,  6
       байт  для узла (или платы интерфейса локальной сети и 2 байта для
       номера гнезда.  С учетом значения WORD размером 2 байта, значения
       BYTE  длиной  1  байт  и IPXAddress размером 12 байт общий размер
       IPXHeader в байтах составляет 2 + 2 + 1 + 1 + 12 + 12  =  30.  Вы
       должны указать целевой адрес,  но исходный адрес посылаемых паке-
       тов IPX будет заполнять сам.

            Чтобы клиент и сервер могли  общаться  друг  с  другом,  они
       должны иметь возможность найти или уже знать гнездо,  через кото-
       рое будут обмениваться данными.  Если номер  гнезда  определяется
       при написании приложения,  то он и будет каждый раз использовать-
       ся.  Такой тип гнезда можно рассматривать как статическое гнездо,
       поскольку каждый раз используется одно и то же гнездо.  Если есть
       опасение,  что такой тип гнезда в  приложении  может  привести  к
       конфликту с использованием гнезда в другом приложении,  вы можете
       разработать метод выделения динамического гнезда,  которое  можно
       использовать  и объявлять об этом другим,  чтобы они также не за-
       действовали это гнездо.  Таким образом,  если гнездо,  которое вы
       обычно используете,  задействовано другим приложением,  вы можете
       просто использовать другое. Если вы хотите зарезервировать гнездо
       для исключительного использования вашим приложением,  свяжитесь с
       отделом разработки Novell (Novell Development Relations) и запро-
       сите его номер.

            Последовательный обмен   пакетами   SPX   (Sequenced  Packet
       Exchange) обеспечивает функциональные возможности повторной пере-
       дачи и тайм-аута, отсутствующие в IPX. Он ориентирован на подклю-
       чения и доступен наряду с IPX.  Если у вас есть IPX, то вы имеете
       и возможность работы с SPX.