Коммуникация по UDP
-
- beginner
- Сообщения: 37
- Зарегистрирован: 24 сен 2010, 16:50
- Версия LabVIEW: 2009
- Контактная информация:
Коммуникация по UDP
Добрый день!
Оказалось, что для коммуникации приложений довольно удобно пользоваться 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". Подскажите, что мож но попробовать сделать?
Оказалось, что для коммуникации приложений довольно удобно пользоваться 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". Подскажите, что мож но попробовать сделать?
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Коммуникация по UDP
параметр host есть в , используется:
- net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
- net address в UDP write - то на какой адрес передать (использовать в передатчике)
multicast - это из другой оперы, указывай адрес 127.0.0.1 в обоих случаях.
- net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
- net address в UDP write - то на какой адрес передать (использовать в передатчике)
multicast - это из другой оперы, указывай адрес 127.0.0.1 в обоих случаях.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
Re: Коммуникация по UDP
Технология IP Multicast использует адреса с 224.0.0.0 до 239.255.255.255.У передатчика и приемника должен быть указан один и тотже IP. Этот IP не связан с IP компьютера.
-
- interested
- Сообщения: 8
- Зарегистрирован: 09 ноя 2010, 23:32
- Версия LabVIEW: 2009
- Контактная информация:
Re: Коммуникация по UDP
Можно ли сделать массовую рассылку с некоторого передатчика (то есть не известен адрес, куда слать, поэтому шлем по всем направлениям (адрес FFFFFFFF, но указан порт, совпадающий с приемником)), и подключаться потом к нему удаленно приемником? Проблема в том, что если прописывать какой-то адрес в UDP Open, то он ругается при любом адресе отличном от 127.x.x.x - выдает ошибку 53: The network address is ill-formed. Адрес вводится через string и string to ip.mzu2006 писал(а): - net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
- net address в UDP write - то на какой адрес передать (использовать в передатчике)
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Коммуникация по UDP
Мне только на прошлой неделе нужен был UDP Multicast, если нажать на Help->Example Finder и вписать в поиск UDP, найдутся несколько примеров по мультикасту. Остаётся только скопировать
-
- interested
- Сообщения: 8
- Зарегистрирован: 09 ноя 2010, 23:32
- Версия LabVIEW: 2009
- Контактная информация:
Re: Коммуникация по UDP
Хорошо, а какой адрес и куда писать, если, например источник рассылки находится по адресу 188.134.30.118 и шлет привет через порт 65535?
Не думаю, что если использовать UDP Multicast, найдется верный источник. Или найдет?
Не думаю, что если использовать UDP Multicast, найдется верный источник. Или найдет?
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
-
- interested
- Сообщения: 8
- Зарегистрирован: 09 ноя 2010, 23:32
- Версия LabVIEW: 2009
- Контактная информация:
Re: Коммуникация по UDP
Глобальной. Если слать данные целенаправленно на 188.134.30.118, то UDP хорошо справляется. Но можно ли использовать UDP, чтобы принимать с конкретного адреса?
У меня есть сервер, непрерывно генерирующий какую-то информацию. Эту информацию можно считать, если подключиться через TCP/IP, но так же одновременно с этим эта информация отправляется "в никуда" по UDP. Вернее даже не "в никуда", а сразу по всем направлениям. Можно ли как-то уловить эту рассылку в глобальной сети? Для локалхоста это работает отлично, испытания в интернете пока к хорошему не привели =\
У меня есть сервер, непрерывно генерирующий какую-то информацию. Эту информацию можно считать, если подключиться через TCP/IP, но так же одновременно с этим эта информация отправляется "в никуда" по UDP. Вернее даже не "в никуда", а сразу по всем направлениям. Можно ли как-то уловить эту рассылку в глобальной сети? Для локалхоста это работает отлично, испытания в интернете пока к хорошему не привели =\
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Коммуникация по UDP
Адрес в UDP Open - это адрес на котором слушать, т.е. IP адрес одного из интерфейсов того компьютера, где исполняется программа. У меня один из адресов 192.168.x.x, прописываю его и все в порядке. Можно вообще ничего не подавать - тогда слушать будет на всех доступных интерфейсах (т.е. в моём случае 192.168.x.x, 10.20.x.x и 127.0.0.x).Jhon писал(а):Проблема в том, что если прописывать какой-то адрес в UDP Open, то он ругается при любом адресе отличном от 127.x.x.x - выдает ошибку 53: The network address is ill-formed. Адрес вводится через string и string to ip.mzu2006 писал(а): - net address в UDP Open - то, на каком адресе слушать (используется в приёмнике)
В локалке да, в инете проблематично: выходной шлюз твоего провайдера должен отрубать все broadcasts (0.0.0.0 и 255.255.255.255) и multicasts (224.0.0.0-239.255.255.255). Многие IP multicasts специально зарезервированы, например для обмена сообщениями между маршрутизаторами.Jhon писал(а):Можно ли сделать массовую рассылку с некоторого передатчика (то есть не известен адрес, куда слать, поэтому шлем по всем направлениям (адрес FFFFFFFF, но указан порт, совпадающий с приемником)), и подключаться потом к нему удаленно приемником?
Если есть сервер с анонсированным IP, то наиболее удобно будет сделать 1 звонок на этот сервер с будущего клиента, а потом сервер начинает слать свои данные по нескольким адресам, в том числе и новому клиенту.
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
- beginner
- Сообщения: 49
- Зарегистрирован: 13 апр 2014, 18:53
- Версия LabVIEW: 14
- Контактная информация:
Re: Коммуникация по UDP
А здесь как быть, подскажите, пожалуйста:
Есть задача постоянно, отправлять по UDP данные нескольким конкретным АРМам (IP-известны) от одного источника (контроллер с LV RT). Можно ли это организовать с помощью "UDP Multicast Write-Only", чтобы не слать один и тот же трафик 10-ти абонентам, например. Но в то же время "слать всем" также не подходит, т.к. источник и приёмники в разных подсетях, и Broadcast не проходит, и + даже если и проходит, то не хорошо этими данными "нагружать" всех абонентов подсетей. Можно ли как-то средствами LabView ограничить диапазон мультикастовых адресов до 10, например?
Как альтернативу вижу 2 варианта:
- вариант с промежуточным сервером, который будет разветвлять поток данных на абонентов. Но это дополнительная железка в сети и дополнительное ПО для неё;
- вариант слать с контроллера адресные посылки для каждого абонента. Но это одни и те же данные по каналу связи *10 раз, и контроллер надо разгружать, а не нагружать.
Есть задача постоянно, отправлять по UDP данные нескольким конкретным АРМам (IP-известны) от одного источника (контроллер с LV RT). Можно ли это организовать с помощью "UDP Multicast Write-Only", чтобы не слать один и тот же трафик 10-ти абонентам, например. Но в то же время "слать всем" также не подходит, т.к. источник и приёмники в разных подсетях, и Broadcast не проходит, и + даже если и проходит, то не хорошо этими данными "нагружать" всех абонентов подсетей. Можно ли как-то средствами LabView ограничить диапазон мультикастовых адресов до 10, например?
Как альтернативу вижу 2 варианта:
- вариант с промежуточным сервером, который будет разветвлять поток данных на абонентов. Но это дополнительная железка в сети и дополнительное ПО для неё;
- вариант слать с контроллера адресные посылки для каждого абонента. Но это одни и те же данные по каналу связи *10 раз, и контроллер надо разгружать, а не нагружать.