QT Receive Interface

Gast #6300994
Lesenswert?

Hey,

ich habe mir eine GUI in QT geschrieben die über alle 
Netzwerkschnittstellen Broadcast Pakete verschickt.
1
    QString discoveryMessage = "1234567890";
2
    QByteArray Data = QByteArray::fromHex(discoveryMessage.toLatin1());
3

4
    discoveryUdpSocket = new QUdpSocket(this);
5
    discoveryUdpSocket->bind(QHostAddress::Any, QUdpSocket::ShareAddress |     QUdpSocket::ReuseAddressHint);
6
    connect(discoveryUdpSocket, SIGNAL(readyRead()), this, SLOT(read_discover_datagram()));
7

8
    /* Update Network Adresses */
9
    foreach (QNetworkInterface interface, QNetworkInterface::allInterfaces()) {
10
        foreach( QNetworkAddressEntry entry, interface.addressEntries() ) {
11
            QHostAddress broadcastAddress = entry.broadcast();
12
            if (broadcastAddress != QHostAddress::Null && entry.ip() != QHostAddress::LocalHost) 
13
{
14
                    discoveryUdpSocket->writeDatagram(Data, broadcastAddress, 4321 );
15
            }
16
        }
17
    }
1
void TestClass::read_discover_datagram()
2
{
3
    while (discoveryUdpSocket->hasPendingDatagrams()) {
4
        QHostAddress sender;
5
        quint16 senderPort;
6
        QByteArray buffer;
7

8
        buffer.resize(discoveryUdpSocket->pendingDatagramSize());
9
        discoveryUdpSocket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort);
10
...

wie kann ich am einfachsten in read_discover_datagram() herausfinden von 
welchen Interfaces die Antwort zurückkam?
Gast #6301159
Lesenswert?

Hey Rolf,

danke, ich hatte das eben versucht. Erhalte aber vom Qt-Designer:

Semantic Issue
testapp.cpp:94:57: error: calling 'receiveDatagram' with incomplete 
return type 'QNetworkDatagram'
qudpsocket.h:77:22: note: 'receiveDatagram' declared here
qudpsocket.h:52:7: note: forward declaration of 'QNetworkDatagram'

Da "class QNetworkDatagram;" in qudpsocket.h forwärtsdeklariert wird.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren