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

Опубликовал Аркадий Кучер (Abadonna) в раздел Программирование - Внешние компоненты

Прослушивание 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-окно. Только для толстого клиента

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

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

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

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

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


Скачать файлы

Наименование Файл Версия Размер
Архив
.zip 608,68Kb
23.02.14
71
.zip 1.0.0.1 608,68Kb 71 Бесплатно

См. также

Добавить вознаграждение
Комментарии
1. Ловыгин Антон (wunderland) 183 24.02.14 12:01 Сейчас в теме
Просто и понятно - как для (тупых) меня :). В копилку...
2. Аркадий Кучер (Abadonna) 3648 24.02.14 12:43 Сейчас в теме
(1) wunderland, спасибо, именно "просто и понятно" я и хотел ;)
3. Сергей (Che) Коцюра (CheBurator) 3366 01.03.14 03:15 Сейчас в теме
4. Станислав Патырило (wondermaker) 21.03.14 04:04 Сейчас в теме
Хм. А применить сие дело к работе с именованными каналами (named pipes) можно?
На сервере работает или как многие другие только на клиенте?
5. Аркадий Кучер (Abadonna) 3648 26.03.14 18:59 Сейчас в теме
(4) wondermaker,
На сервере работает
В выходные перевожу одного клиента на 1с-сервер - клиент, вот и проверю. Не на чем было проверять...
6. Alexey (zarius) 143 15.04.14 18:28 Сейчас в теме
Есть в планах сделать полноценного клиента для tcp-сервера из этой ВК?
Чтобы можно было подключаться с серверу по адресу:порту и слушать ответы от него (к примеру в двоичных данных).
7. Павел Королев (fd13) 28.01.16 13:11 Сейчас в теме
Присоединюсь к предыдущему вопросу: будет ли TCP-сервер?
8. Сергей Вольф (swolf256) 01.06.16 09:51 Сейчас в теме
(7) fd13, Автор, к сожалению, уже давно не топчет эту планету
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа