gifts2017

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
68
.zip 1.0.0.1 608,68Kb 68 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

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