У меня проблема с подключением 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()));
}
}
Задача ещё не решена.
Других решений пока нет …