Операционная система NetWare




Набор протоколов IPX/SPX - часть 6


/p>

Рис. 2.16. Структура пакета SPX

Первые десять полей пакета совпадают с заголовком пакета IPX. Рассмотрим остальные поля заголовка SPX.

Поле ConnControl содержит набор битовых флагов, управляющих передачей данных по каналу SPX.

Поле DataStreamType также состоит из однобитовых флагов, которые используются для классификации данных, передаваемых или принимаемых при помощи протокола SPX.

Поле SourceConnID содержит номер канала связи передающей программы, присвоенный протоколом SPX при создании канала связи. Полем управляет протокол SPX.

Поле DestConnID содержит номер канала связи принимающей стороны. Так как все пакеты, приходящие на один номер гнезда, могут принадлежать разным каналам связи (на одном гнезде можно открыть несколько каналов связи), то приходящие пакеты следует классифицировать по номеру канала связи. Полем управляет протокол SPX.

Поле SeqNumber содержит счётчик пакетов, переданных по каналу в одном направлении. На каждой стороне канала используется свой счётчик. При достижении значения FFFFh счётчик сбрасывается в 0, после чего процесс счёта продолжается. Содержимым поля управляет протокол SPX.

Поле AckNumber содержит номер следующего пакета, который должен быть принят протоколом SPX. Содержимым этого поля управляет протокол SPX.

Поле AllocNumber содержит количество буферов, отведенных программой для приёма пакетов. Содержимым этого поля управляет протокол SPX.

Таблица 2.4. Примитивы API-интерфейсов для работы по протоколу SPX

ПримитивОписание

SPXListenForConnectionИспользуется в паре с функцией SPXEstablishConnection для образования канала связи.
Вход - адрес блока ECB.
Прикладную программу, в которой используется функция SPXListenForConnection, принято называть программой-сервером (она принимает первый пакет канала). Прикладную программу, в которой используется функция SPXEstablishConnection, называют программой-клиентом (она посылает первый пакет программе-серверу). При использовании примитива SPXListenForConnection в программе-сервере необходимо выполнить следующие шаги:
Выполнить обращение к функции SPXListenForSequencedPacket, чтобы обеспечить в дальнейшем приём пакета от программы-клиента.
Выполнить обращение к функции SPXListenForConnection. После успешного образования канала в поля InUse и Ccode блока ECB будет записано нулевое значение.
Ожидать приёма пакета (см. шаг 1).

SPXEstablishConnectionИспользуется в программе-клиенте для образования канала связи.
Вход - адрес блока ECB.
При использовании этого примитива в программе-клиенте необходимо выполнить следующие шаги:
Выполнить обращение к функции SPXListenForSequencedPacket, чтобы обеспечить в дальнейшем приём пакета от программы-сервера.
Выполнить обращение к функции SPXEstablishConnection. После успешного образования канала в поля InUse и Ccode блока ECB будет записано нулевое значение, а поле SourceConnID заголовка пакета SPX будет содержать номер образованного канала связи.
С помощью функции SPXSendSequencedPacket выполнить передачу первого пакета программе-серверу.

SPXListenForSequencedPacketОбеспечивает приём пакета средствами протокола SPX.
Вход - адрес блока ECB.

SPXSendSequencedPacketОбеспечивает передачу пакета.
Вход - адрес блока ECB, а также номер канала, используемый программой-получателем.
Номер канала следует выбирать из поля SourceConnID заголовка принятого пакета.

SPXGetConnectionStatusПроверить состояние канала.
Вход - номер канала и указатель на буфер, куда записывается информация о состоянии канала.

SPXTerminateConnectionЭта функция автоматически посылает удалённому партнёру пакет, который состоит из одного заголовка. В поле DataStreamType этого заголовка находится значение FEh, которое говорит программе получателя закрыть канал (т.е. выполнить в ответ функцию SPXTerminateConnection).
Вход - адрес блока ECB и номер канала связи.
Далее обе программы должны закрыть используемые гнёзда.

SPXAbortConnectionФункция разрывает канал связи без согласования с программой получателя. Используется только в катастрофических случаях, когда невозможно выполнить нормальную процедуру закрытия канала.
Вход - номер канала связи.

<


Содержание  Назад  Вперед