Russian Qt Forum

Qt => Работа с сетью => Тема начата: CTAJIEBAP от Февраль 25, 2014, 13:13



Название: QUdpSocket не принимает пакеты
Отправлено: CTAJIEBAP от Февраль 25, 2014, 13:13
Не могу прочитать пакет UDP. Ситуация вот какая: есть устройство которое посылает UDP пакеты на адреса 20.255.255.255. WireShark видит эти пакеты, но программой написанной на QT я не могу получить пакет. Получаю пакет так:
Код:
connect(socket, SIGNAL(readyRead()), this, SLOT(listPort()));

socket->bind(QHostAddress("20.0.0.1"), 36882);

// Это код слота listPort()
QByteArray datagram;
QHostAddress sender;
quint16 senderPort;

while (socket->hasPendingDatagrams()) {
         datagram.resize(socket->pendingDatagramSize());
         socket->readDatagram(datagram.data(), datagram.size(),&sender, &senderPort);
}

Адрес компьютера на котором работает программа написанная на QT 20.0.0.1 (а так же 192.168.1.10). Если, например, послать UDP пакет на адрес 20.0.0.1 то покет читается программой написанной на QT, а на 20.255.255.255 не читается.

В чем может быть причина?


Название: Re: QUdpSocket не принимает пакеты
Отправлено: Bepec от Февраль 25, 2014, 13:39
Делайте так
Код:
socket_.bind(8202);
connect( &socket_, SIGNAL(readyRead()), SLOT(readyRead()));
Никаких проблем с этим не замечал :)


Название: Re: QUdpSocket не принимает пакеты
Отправлено: Serr500 от Февраль 25, 2014, 15:29
http://qt-project.org/doc/qt-5.0/qtnetwork/broadcastreceiver-receiver-cpp.html (http://qt-project.org/doc/qt-5.0/qtnetwork/broadcastreceiver-receiver-cpp.html)


Название: Re: QUdpSocket не принимает пакеты
Отправлено: ti0 от Июль 29, 2014, 13:04
Делал по примеру broadcast client/server из Qt. Все работает, если client и server находятся на одном компьютере.
Соответственно, как сделать, что бы клиент принимал пакеты, если сервер находится на другом компьютере? Ни одного примера не нашел.
На данном этапе, код выглядит так:
Сервер (ip 192.168.1.105):
Код:
udpSocket->writeDatagram(array.data(), array.size(),
                             QHostAddress::Broadcast, 45454);
Клиент ( хз какой ip):
Код:
udpSocket->bind(QHostAddress("192.168.1.105"), 45454, QUdpSocket::ShareAddress);
Чтение датаграммы:
Код:
udpSocket->readDatagram(datagram.data(), datagram.size());
Код не работает.