Russian Qt Forum
Май 02, 2024, 21:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QUdpSocket не принимает пакеты  (Прочитано 5491 раз)
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 не читается.

В чем может быть причина?
Записан
Bepec
Гость
« Ответ #1 : Февраль 25, 2014, 13:39 »

Делайте так
Код:
socket_.bind(8202);
connect( &socket_, SIGNAL(readyRead()), SLOT(readyRead()));
Никаких проблем с этим не замечал Улыбающийся
Записан
Serr500
Гость
« Ответ #2 : Февраль 25, 2014, 15:29 »

http://qt-project.org/doc/qt-5.0/qtnetwork/broadcastreceiver-receiver-cpp.html
Записан
ti0
Новичок

Offline Offline

Сообщений: 38


Просмотр профиля
« Ответ #3 : Июль 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());
Код не работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.