Коммуникация по UDP

ActiveX, .NET, DLL
Ответить
avnnn
beginner
beginner
Сообщения: 37
Зарегистрирован: 24 сен 2010, 16:50
Версия LabVIEW: 2009
Контактная информация:

Коммуникация по UDP

Сообщение avnnn »

Добрый день!
Оказалось, что для коммуникации приложений довольно удобно пользоваться UDP (User Datagram Protocol) даже на одной машине. Если приложение может передавать данные по этому протоколу, то LabView может их принимать. У меня есть приложение, написанное на Delphi, которое принимает сообщения, есть тестерная программа (тоже на Delphi), которая передает сигнал для тестирования первой программы. Чтобы было понятнее: в тестовой программе указывается порт для отправки и приема
(например, назначаем откуда - 8090 и куда - 8092), в основной тоже самое. Все хорошо, все работает. Есть еще одна настройка - host. Если программы на одном компьютере устанавливаем localhost (127.0.0.1).
В LabView есть примеры работы с UDP. Всё практически то же самое, тоже две программы (передатчик и приемик), но host там нету, а есть MULTICAST ADRESS. Вот с ним проблемы. Причём интересно то, что программа-приемник на LabView получает сообщения от программы-тестера на Delphi, а вот наоборот - нет. Я думаю, что проблема в этом самом MULTICAST ADRESS. Ведь в программе на Delphi его вообще нет (он никак не задается). Я пробовал его в UDP-терминале в LabView убирать, но он ругается. Сейчас там стоят цифры 234.5.6.7. Если я их меняю на другие, тоже ругается, пишет - "Multicast connections cannot send to singlecast addresses". Подскажите, что мож но попробовать сделать? :think:
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Коммуникация по UDP

Сообщение mzu2006 »

параметр host есть в :labview: , используется:
- net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
- net address в UDP write - то на какой адрес передать (использовать в передатчике)

multicast - это из другой оперы, указывай адрес 127.0.0.1 в обоих случаях.
Stkn
assistant
assistant
Сообщения: 128
Зарегистрирован: 25 янв 2009, 11:08
Версия LabVIEW: 2014

Re: Коммуникация по UDP

Сообщение Stkn »

Технология IP Multicast использует адреса с 224.0.0.0 до 239.255.255.255.У передатчика и приемника должен быть указан один и тотже IP. Этот IP не связан с IP компьютера.
Jhon
interested
interested
Сообщения: 8
Зарегистрирован: 09 ноя 2010, 23:32
Версия LabVIEW: 2009
Контактная информация:

Re: Коммуникация по UDP

Сообщение Jhon »

mzu2006 писал(а): - net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
- net address в UDP write - то на какой адрес передать (использовать в передатчике)
Можно ли сделать массовую рассылку с некоторого передатчика (то есть не известен адрес, куда слать, поэтому шлем по всем направлениям (адрес FFFFFFFF, но указан порт, совпадающий с приемником)), и подключаться потом к нему удаленно приемником? Проблема в том, что если прописывать какой-то адрес в UDP Open, то он ругается при любом адресе отличном от 127.x.x.x - выдает ошибку 53: The network address is ill-formed. Адрес вводится через string и string to ip.
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Коммуникация по UDP

Сообщение Eugen Graf »

Мне только на прошлой неделе нужен был UDP Multicast, если нажать на Help->Example Finder и вписать в поиск UDP, найдутся несколько примеров по мультикасту. Остаётся только скопировать :wink:
Jhon
interested
interested
Сообщения: 8
Зарегистрирован: 09 ноя 2010, 23:32
Версия LabVIEW: 2009
Контактная информация:

Re: Коммуникация по UDP

Сообщение Jhon »

Хорошо, а какой адрес и куда писать, если, например источник рассылки находится по адресу 188.134.30.118 и шлет привет через порт 65535?
Не думаю, что если использовать UDP Multicast, найдется верный источник. Или найдет?
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Коммуникация по UDP

Сообщение Eugen Graf »

Я не понял, речь идёт о локальной сети или глобальной?
Jhon
interested
interested
Сообщения: 8
Зарегистрирован: 09 ноя 2010, 23:32
Версия LabVIEW: 2009
Контактная информация:

Re: Коммуникация по UDP

Сообщение Jhon »

Глобальной. Если слать данные целенаправленно на 188.134.30.118, то UDP хорошо справляется. Но можно ли использовать UDP, чтобы принимать с конкретного адреса?
У меня есть сервер, непрерывно генерирующий какую-то информацию. Эту информацию можно считать, если подключиться через TCP/IP, но так же одновременно с этим эта информация отправляется "в никуда" по UDP. Вернее даже не "в никуда", а сразу по всем направлениям. Можно ли как-то уловить эту рассылку в глобальной сети? Для локалхоста это работает отлично, испытания в интернете пока к хорошему не привели =\
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Коммуникация по UDP

Сообщение mzu2006 »

Jhon писал(а):
mzu2006 писал(а): - net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
Проблема в том, что если прописывать какой-то адрес в UDP Open, то он ругается при любом адресе отличном от 127.x.x.x - выдает ошибку 53: The network address is ill-formed. Адрес вводится через string и string to ip.
Адрес в UDP Open - это адрес на котором слушать, т.е. IP адрес одного из интерфейсов того компьютера, где исполняется программа. У меня один из адресов 192.168.x.x, прописываю его и все в порядке. Можно вообще ничего не подавать - тогда слушать будет на всех доступных интерфейсах (т.е. в моём случае 192.168.x.x, 10.20.x.x и 127.0.0.x).
Jhon писал(а):Можно ли сделать массовую рассылку с некоторого передатчика (то есть не известен адрес, куда слать, поэтому шлем по всем направлениям (адрес FFFFFFFF, но указан порт, совпадающий с приемником)), и подключаться потом к нему удаленно приемником?
В локалке да, в инете проблематично: выходной шлюз твоего провайдера должен отрубать все broadcasts (0.0.0.0 и 255.255.255.255) и multicasts (224.0.0.0-239.255.255.255). Многие IP multicasts специально зарезервированы, например для обмена сообщениями между маршрутизаторами.

Если есть сервер с анонсированным IP, то наиболее удобно будет сделать 1 звонок на этот сервер с будущего клиента, а потом сервер начинает слать свои данные по нескольким адресам, в том числе и новому клиенту.
Shurik_85
beginner
beginner
Сообщения: 49
Зарегистрирован: 13 апр 2014, 18:53
Версия LabVIEW: 14
Контактная информация:

Re: Коммуникация по UDP

Сообщение Shurik_85 »

А здесь как быть, подскажите, пожалуйста:
Есть задача постоянно, отправлять по UDP данные нескольким конкретным АРМам (IP-известны) от одного источника (контроллер с LV RT). Можно ли это организовать с помощью "UDP Multicast Write-Only", чтобы не слать один и тот же трафик 10-ти абонентам, например. Но в то же время "слать всем" также не подходит, т.к. источник и приёмники в разных подсетях, и Broadcast не проходит, и + даже если и проходит, то не хорошо этими данными "нагружать" всех абонентов подсетей. Можно ли как-то средствами LabView ограничить диапазон мультикастовых адресов до 10, например?

Как альтернативу вижу 2 варианта:
- вариант с промежуточным сервером, который будет разветвлять поток данных на абонентов. Но это дополнительная железка в сети и дополнительное ПО для неё;
- вариант слать с контроллера адресные посылки для каждого абонента. Но это одни и те же данные по каналу связи *10 раз, и контроллер надо разгружать, а не нагружать.
Ответить

Вернуться в «Коммуникация с приложениями»