В своей программе отправляю на устройство последовательность байт(68, 1, 0). Устройство отвечает последовательностью байт(68, 1, 0). Все это я вижу в программе WireShark. Но не могу принять пакет т.к. не происходит bind с адресом 192.168.0.255:1104. Кто может подсказать, как это сделать?
П.С. уже облазил весь QT ассистант, но ответа не нашел.
UPDATE новый код программы (это тестовый код, просто чтобы разобраться с работой с сокетами):
#include "UDP.h"
UDP_Manager::UDP_Manager()
{
QHostAddress address("192.168.0.104");
Udp_Socket = new QUdpSocket(this);
bool Is_Bound = Udp_Socket->bind(QHostAddress::Any, 1104);
QByteArray Data;
Data.resize(3);
Data[0] = 68;
Data[1] = 1;
Data[2] = 0;
Udp_Socket->writeDatagram(Data, address, 1004);
_sleep(500);
char Buf[4];
qint64 i = Udp_Socket->readDatagram(Buf, sizeof(Buf));
}
Скрин из программы WireShark:
Приём broadcast'а не отличается от приёма обычных сообщений, надо только за'bind'иться на локальные порт и адрес.
Ошибки в коде выше:
Во-первых, два сокета здесь не обязательны, вполне достаточно одного (если в дальнейшем на них не будет висеть какая-то различная логика). Сокет — это дуплексная абстракция.
Во-вторых, bind() всегда на локальный адрес (192.168.0.11 в данном случае), если нужно слушать все локальные интерфейсы, то следует привязываться к 0.0.0.0 (он же QHostAddress::Any).
В-третьих, проверка Udp_Socket_RX->state() свежесозданного сокета бессмысленна.
В итоге вся инициализация сильно схлопывается:
QHostAddress address("192.168.0.104");
Udp_Socket = new QUdpSocket(this);
Udp_Socket->bind(QHostAddress::Any, 1104);
connect(Udp_Socket_RX, SIGNAL(readyRead()), this, SLOT(Receive()));
QByteArray Data {68,1,0};
Udp_Socket->writeDatagram(Data, address, 1004);
В-четвёртых, при чтении из сокета Address_RX и Port — это выходные параметры, их надо проверять после чтения, а не задавать до.
В остальном вроде всё... должно работать...
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости