Запрет запуска копии приложения в локальной сети

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
Аватара пользователя
sanekerfort
interested
interested
Сообщения: 5
Зарегистрирован: 18 янв 2011, 08:15
Версия LabVIEW: 2012
Откуда: Томск
Контактная информация:

Запрет запуска копии приложения в локальной сети

Сообщение sanekerfort »

Всем творческих успехов!
Не смог найти информации по вопросу, сформулированному в названии темы.
Мне нужно каким-то образом отследить, запущена ли программа (или VI в терминах LabView) в локальной сети, и если она где-то уже выполняется, не запускать второй экземпляр.
Компьютеров в сети не много и у всех статические, постоянные IP-адреса.
Может есть в LabView какие-то средства для решения такой задачи?
Буду рад подсказкам о решении этого вопроса.
Спасибо!
В электронике чудес не бывает, бывают плохие контакты!
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: Запрет запуска копии приложения в локальной сети

Сообщение IvanLis »

sanekerfort писал(а):Мне нужно каким-то образом отследить, запущена ли программа (или VI в терминах LabView) в локальной сети, и если она где-то уже выполняется, не запускать второй экземпляр.
Компьютеров в сети не много и у всех статические, постоянные IP-адреса.
Может есть в LabView какие-то средства для решения такой задачи?
Можно использовать Network-Published Shared Variable (http://www.ni.com/white-paper/4679/en/#toc3). Хранить ее на основном компьютере, клиенты при запуске будут к ней обращаться и считывать "флаг", по его значению принимать решение, можно запускаться или нет. В переменной можно хранить также время запуска и IP компьютера на котором она выполняется.
Аналогичный функционал можно реализовать с использованием расшаренного файла на сервере.
Тут один недостаток, в случае падения "основного" компа вся система перестанет работать правильно.


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

Я бы например предпочел первый вариант.
AlexanderKonoval
developer
developer
Сообщения: 257
Зарегистрирован: 03 янв 2014, 19:37
Версия LabVIEW: 2016
Откуда: Украина, Киев
Контактная информация:

Re: Запрет запуска копии приложения в локальной сети

Сообщение AlexanderKonoval »

я бы таки пользовал UDP-порт.

Софт в процессе работы раз в какой-то интервал шлёт уведомление, что он работает.

Итого, при запуске программа должна опросить все компьютеры в локальной сети (вы говорили, что адреса статические, что упрощает задачу, хотя всегда есть вариант добавления новой машины в сеть, что вызовет необходимость добавлять её к опросу) и если нигде нет запущенной копии - начать работу.

Ну или, если есть в сети сервер, то сделать на нём "светофор". Я бы для этого использовал веб-сервис или TCP-порт. Но как по мне - веб-сервис лучше на случай, если позже захочется расширить функционал этого сервера, сделать какое-то API и т.д.
колдооооовствооооо! (С)
Borjomy_1

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

Re: Запрет запуска копии приложения в локальной сети

Сообщение Borjomy_1 »

я бы таки пользовал UDP-порт.

Софт в процессе работы раз в какой-то интервал шлёт уведомление, что он работает.

Итого, при запуске программа должна опросить все компьютеры в локальной сети (вы говорили, что адреса статические, что упрощает задачу, хотя всегда есть вариант добавления новой машины в сеть, что вызовет необходимость добавлять её к опросу) и если нигде нет запущенной копии - начать работу.

Ну или, если есть в сети сервер, то сделать на нём "светофор". Я бы для этого использовал веб-сервис или TCP-порт. Но как по мне - веб-сервис лучше на случай, если позже захочется расширить функционал этого сервера, сделать какое-то API и т.д.
Здесь немного по-другому: использовать широковещательные пакеты UDP. Каждое приложение 1. Посылает широковещательный запрос (на широковещательный порт) и ждет ответа по стандартному порту. Если ответа нет, то приложение не закрывается. 2. открывает этот широковещательный порт уже у себя, по которому ловит запрос (адрес отправителя известный) и отправляет ответ на стандартный порт отправителю, указывая, что приложение уже запущено. Обратите внимание: широковещательный IP адрес и порт отличаются от обычных.
Mikhail
interested
interested
Сообщения: 5
Зарегистрирован: 29 авг 2016, 17:11
Версия LabVIEW: 2016
Откуда: Москва
Контактная информация:

Re: Запрет запуска копии приложения в локальной сети

Сообщение Mikhail »

Тут нужно отталкиваться от того, какую именно задачу Вы пытаетесь решить подобным способом.
Если стоит задача защитить свое ПО от тиражирования и лицензировать его, то для этого есть специализированные средства: http://labviewportal.org/viewtopic.php?f=87&t=8870
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»