Формат пакетов Z, Y, N совершенно одинаков и примитивен.
Адресный пакет A имеет такой формат:Код:Смещение длина описание +00 1 01 +01 1 23h - длина пакета +02 1 номер пакета +03 1 'Z' или 'Y' или 'N' +04 1 Контрольная сумма +05 1 0Dh
Таким образом, пакет может адресовать как конкретное РМУ, так и все сразу.Код:+00 1 01 +01 1 25h - длина пакета +02 1 номер пакета +03 1 'A' +04 1 Тип адреса. 0 - широковещательный, 1 - для конкретного РМУ +05 1 Номер РМУ (в широковещательном режиме не имеет смысла) +06 1 Контрольная сумма +07 1 0D
Пакет приема данных - тип R, инициирует прием данных клиентом от сервера. Пакет определяет, какие именно данные будут передаваться и что с ними потом делать. Формат пакета:
Код:+00 1 01 +01 1 28h - длина пакета +02 1 номер пакета +03 1 'R' +04 1 Цифра в ASCII от '0' до '9' - тип передаваемых данных +05 4 Для данных типа 3 и 7 - стартовый адрес области в HEX +09 1 Контрольная сумма +0A 1 0D
Пакет передачи данных - тип S - запрос на передачу данных от клиента к серверу. С его помощью можно выгрузить из РМУ на сервер бейсик-программу или любую область памяти. Формат пакета:
Цифра типа данных по смещению 04 пакетов R и S может принимать следующие значения:Код:+00 1 01 +01 1 31h - длина пакета +02 1 номер пакета +03 1 'S' +04 1 копируется в ответный пакет R, назначение принимаемых сервером данных +05 4 копируется в ответный пакет R, адрес размещения данных в памяти сервера +09 1 Цифра в ASCII от '0' до '9' - тип данных, отсылаемых к серверу +0A 4 Для блоков памяти - адрес начала области памяти в HEX +0E 4 Для блоков памяти - адрес конца области памяти в HEX +12 1 Контрольная сумма +13 1 0D
Понятно, что не все типы данных можно использовать в обоих - и S, и R пакетах. Например, передача в РМУ тела COM-сообщения бессмысленна. Начальный и конечный адреса в пакете записываются в виде 4 цифр или букв в HEX-коде со всеми незначащими нулями, например "001D".Код:0 - текстовое сообщение с предварительной очисткой экрана, для пакета S - запрос копии экрана РМУ 1 - область памяти с адреса 91D1, смысла я не понял. 2 - бейсик-программа 3 - образ области памяти (двоичный набор данных) 4 - в ОПТС не определено, используется сетевой библиотекой как признак файла на диске 5 - тело COM сообщения 6 - флаг наличия COM-сообщения 7 - образ блока памяти с передачей управления на начало блока 8 - предыдущий счетчик пакетов, видимо для проверки числа принятых пакетов. 9 - текстовое сообщение без очистки экрана
Ну и, наконец, самый главный - пакет данных, тип D. В этот пакет упаковываются передаваемые данные.
Понятно, что здесь тоже принимаются меры по недопустимости управляющих кодов 00-1F в теле пакета. Для этого данные упаковываются с помощью специального кода 23h (знак #) следующим образомКод:+00 1 01 +01 1 длина пакета (+1Dh) +02 1 номер пакета +03 1 'D' +04 LLL Данные пакета LLL+4 1 Контрольная сумма LLL+5 1 0D
23 xx - указывает, что к следующему байту надо добавить 40h, а старший бит передать как есть
23 23 - заменяется на одиночный знак #
23 00 - заменяется на 00
Упаковке подвергаются все байты с кодами 00-1F, 80-9F, а также байт 7F. При формировании пакета данных ОПТС следит, чтобы общий размер пакета не превышал 88 байт. Видимо, и при формировании передаваемых пакетов следует придерживаться такого же правила.
Ну вот вроде бы и все по форматам пакетов. Осталось описать сеансовый уровень сети - порядок передачи пакетов.




Ответить с цитированием
Размещение рекламы на форуме способствует его дальнейшему развитию 
