QUdpSocket link-local multicast между машинами Linux и Windows

У меня проблема с подключением 2 компьютеров. Первый запуск (передатчик) в Windows и второй запуск в Linux (Ubuntu 16.04). Я передаю данные через QUdpSocket между этими двумя машинами локально, но когда передача проходит, приемник ничего не ловит (я имею в виду, что QT ничего не показывает). Для проверки, это работает правильно, я использовал wireshark, и это показывает, что это соединение между машинами, все пакеты проходят. Но QT ничего не показывает! Я использовал простой пример qt о получении многоадресных пакетов. Что я делаю не так?

введите описание изображения здесь

На 2-х машинах Windows все работает правильно.

мой ip 192.168.1.1
и маска 255.255.255.0

Я добавил этот код, смотрите его ниже. Я также добавляю wireshark printscreen.

#include <QtWidgets>
#include <QtNetwork>
#include "receiver.h"
Receiver::Receiver(QWidget *parent)
: QDialog(parent)
{
groupAddress = QHostAddress("226.1.1.1");//QHostAddress("239.255.43.21");

statusLabel = new QLabel(tr("Listening for multicasted messages"));
quitButton = new QPushButton(tr("&Quit"));

udpSocket = new QUdpSocket(this);
udpSocket->bind(QHostAddress::AnyIPv4, 50100,QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint );//udpSocket->bind(QHostAddress::AnyIPv4, 45454, );
//udpSocket->setSocketOption(QAbstractSocket::MulticastTtlOption,QVariant(1));
//udpSocket->setMulticastInterface(QNetworkInterface::interfaceFromName(groupAddress.toString())); //getInterfaceByAddress()
udpSocket->joinMulticastGroup(groupAddress);//bool flag = groupAddress.isMulticast();

connect(udpSocket, SIGNAL(readyRead()),
this, SLOT(processPendingDatagrams()));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));

QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch(1);
buttonLayout->addWidget(quitButton);
buttonLayout->addStretch(1);

QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(statusLabel);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);

setWindowTitle(tr("Multicast Receiver"));
}

void Receiver::processPendingDatagrams()
{
while (udpSocket->hasPendingDatagrams()) {
QByteArray datagram;
datagram.resize(udpSocket->pendingDatagramSize());
udpSocket->readDatagram(datagram.data(), datagram.size());
statusLabel->setText(tr("Received datagram: \"%1\"").arg(datagram.data()));
}
}

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]