NetNative: ВК для работы с сетью


Прослушивание UDP-портов, посылка UDP-сообщений, возможность организации UDP-чата, некоторые сетевые команды.
Написана по технологии Native

Настоящая ВК является немного урезанной версией ВК, работающей в нашем холдинге в базе 1С в связке со специальными службами, установленными на каждом из компьютеров холдинга (в первую очередь используется для подачи команд службам).

Написана по технологии Native, т.е. не требует регистрации в реестре и особых прав пользователя.

В архиве находится файл тестовой базы 1Cv8.1CD, собственно файл ВК NetNative.dll и пара внешних тестовых обработок.

Поключение ВК: 

ПодключитьВнешнююКомпоненту(ПолноеИмяФайлаВК,»NetNative»,AddInType.Native);

Создание экземпляра класса:

Сеть =    Новый(«AddIn.NetNative.V8Net»); // слева — любая глобальная переменная

МЕТОДЫ ВК:

UDP_Создать(НомерПорта), например: 

СлушаемПорт=Сеть.UDP_Создать(10000);

Ставит UDP-порт на прослушивание.

При получении входящего UDP-сообщения генерирует внешнее событие «UDP_READ»,

данные — текст сообщения.

Возвращает номер порта на прослушивании.

Очень важные нюансы:

На одном компьютере невозможно подключить на прослушивание один и тот же порт из разных экземпляров одной и той же программы или разных программ. Поэтому был доработан модуль IdSocketHandle таким образом, чтобы не генерировалось исключение, а занимался следующий по порядку свободный порт. Т.е. при попытке занять уже занятый порт 10000, на прослушивание встанет ближайший по порядку свободный, например, 10001, который и вернет метод UDP_Создать.

Вышеизложенное несколько усложняет создание UDP-чата при использовании на терминале, или при запуске некольких копий 1С на отдельном компьютере. В тестовой базе применен туповато-лобовой вариант: создан справочник СетевыеПользователи, каждому пользователю назначен свой стартовый порт, с интервалом 10 от предыдущего.

Таким образом, для каждого пользователя существут возможность запуска до 10 копий 1С на одном компьютере.

При отсылке UDP-сообщения методом UDP_Сообщение (см. ниже), сообщение посылается на все 10 возможных портов.

Другие варианты обхода проблемы занятых портов: «разруливающая» база на 1С, или «разруливающая» программа с компонентом TIdUDPServer.

UDP_Сообщение (ТекстСообщения,НомерПорта,Компьютер)

ТекстСообщения Компьютер — строки, НомерПорта — число.

Компьютер — Имя или IP, необязательный, если пусто — широковещательное сообщение по всем компьютерам подсети.

Нюанс — при посылке широковещательного сообщения его получат только компьютеры той подсети, где расположен посылающий компьютер,

например, получат компьютеры подсети 192.168.100.ХХХ, и не получат компьютеры подсети 192.168.200.ХХХ.

Поэтому лучше указывать конкретный Компьютер.

IP2Name(IP) — возвращает имя компьютера по IP-адресу.

Name2IP(Имя) — возвращает IP-адрес по имени компьютера.

Пинг(Компьютер,ИнтервалОжидания) — возвращает Истина или Ложь.

Компьютер — имя или IP-адрес, строка

ИнтервалОжидания — число, мс, необязательный, по умолчанию 2500

СетевойПользователь() — возвращает сетевое (не 1С-кое) имя пользователя.

ШифроватьСтроку(Строка), ДешифроватьСтроку(Строка) — возвращает соответственно зашифрованную и расшифрованную строки. Значение одной и той же шифрованной строки всегда различно, дешифровка — однозначна.

Примечание: в моей базе используется для шифрования UDP- команд службам (на всякий случай)

Задержка(Интервал), мс. — ненагружающая задержка выполнения.

Таймер(Интервал), мс. — устанавливает таймер.

При срабатывании таймер генерирует событие «MAIN_TIMER_EVENT»   

Свойство

ИнтервалТаймера — считывает/устанавливает интервал таймера

MD5Файла(ПолноеИмяФайла) — вычисляет MD5 содержимого указанного файла.

Примечание: я использую для определения изменился ли список всех файлов exe на компьютере с установленной службой.

БоковаяПанель(Ширина)

Устанавливает левую панель на MDI-окно. Только для толстого клиента

Следующие методы только для установленной в толстом клиенте боковой панели:

ДобавитьСтрокуВПанель(Строка) — добавляет строку в панель.

ОчиститьПанель() — очищает весь текст в панели.

Прогресс(Позиция) — устанавливает позицию прогресс-бара в боковой панели.

СохранитьСодержимоеПанели(ИмяФайлаДляСохранения) — сохраняет содержимое панели в указанный файл


10 Comments

  1. wunderland

    Просто и понятно — как для (тупых) меня :). В копилку…

    Reply
  2. Abadonna

    (1) wunderland, спасибо, именно «просто и понятно» я и хотел 😉

    Reply
  3. CheBurator

    +1

    Reply
  4. wondermaker

    Хм. А применить сие дело к работе с именованными каналами (named pipes) можно?

    На сервере работает или как многие другие только на клиенте?

    Reply
  5. Abadonna

    (4) wondermaker,

    На сервере работает

    В выходные перевожу одного клиента на 1с-сервер — клиент, вот и проверю. Не на чем было проверять…

    Reply
  6. zarius

    Есть в планах сделать полноценного клиента для tcp-сервера из этой ВК?

    Чтобы можно было подключаться с серверу по адресу:порту и слушать ответы от него (к примеру в двоичных данных).

    Reply
  7. fd13

    Присоединюсь к предыдущему вопросу: будет ли TCP-сервер?

    Reply
  8. swolf256

    (7) fd13, Автор, к сожалению, уже давно не топчет эту планету

    Reply
  9. chemezov

    Охренеть какая зачетная штука

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *