Мне нужна была внешняя Native компонента для работы с UDP. Есть вот компонента //infostart.ru/public/261418/ но она работает плохо, в фоновом задании, например не хочет работать. Да и кажется, что на инфостарте как-то не хватает компонент с таким функционалом. Поэтому решил наваять сам.
Компонента построена на Native-API (не требует регистрации в реестре), с использованием найденной на инфостарте бесплатного модуля для дельфи от 2011 года //infostart.ru/public/88060/. Некоторые методы моей компоненты остались оттуда. Компонента использует блокирующие сокеты (для UDP я не стал заморачиваться за асинхронные), с использованием функций из winsock.h для отправки sendto(..) и стандартный компонент Delphi - IdUDPServer для получения. При получении данных компонента генерирует внешнее событие.
Компонента тестировалась на самописной конфигураций (УФ) и еще на УТ10.3.
Включение компоненты:
УстановитьВнешнююКомпоненту("ОбщийМакет.MyUDP");
ПодключитьВнешнююКомпоненту("ОбщийМакет.MyUDP", "MyUDP");
глКомпонента = Новый("AddIn.MyUDP.ExtentionUDP");
Свойства:
- ListeningPort, ПрослушиваемыйПорт - при запуске прослушки тут будет находится используемый порт. При остановке он скидывается в ноль.
- SendingPort, ПортОтправки. Порт отправки имеет небольшое значение, обычно он не нужен, но компонента его сразу включает и он тут же готов отправлять.
- UseEncodeToBase64, ИспользоватьКодированиеBase64. Использовать кодировку Base64 при приеме. Это полезно, когда получаем нетекстовые данные, преобразование в строку в таких случаях выдает неверные данные, кодировка помогает этого избежать.
Методы:
- GetAddressIP(), ПолучитьАдресIP()
- GetHostName(), ПолучитьИмяКомпьютера()
- ListenPort(ПрослушиваемыйПорт), ПодключитьОжидание(ПрослушиваемыйПорт) - При получении данных компонента генерирует внешнее событие с источником MyUDP, событие Data.
- StopListen(), ПрекратитьОжидание()
- SendData(IP, Порт, Сообщение), ОтправитьДанные(IP, Порт, Сообщение)
- Sleep(Миллисекунд), Пауза(Миллисекунд) - Эта функция была в исходном примере ВК дельфи, предполагается, что она не грузит процессор.
Методы ПодключитьОжидание(), ПрекратитьОжидание(), ОтправитьДанные() в ответ выдают либо Истина, если компонента считает, что всё в порядке, либо строку с описанием ошибки.
P.S. Помните, что UDP не гарантирует прием сообщений.
Добавка от 04.04.2021 - Добавлено Base64.