kostenloser Webspace werbefrei: lima-city


Qt QUdpSocket

lima-cityForumProgrammiersprachenC/C++ und D

  1. Autor dieses Themas

    sebastian-online

    sebastian-online hat kostenlosen Webspace.

    Hallo,

    für ein kleines Qt-Programm brauche ich mal eure Hilfe:

    Ich möchte Udp-Packete von einer bestimmten IP-Adresse und einem bestimmten Port empfangen. Mein Ansatz war:

    ...
    udpSocket = new QUdpSocket(0);
    bool suc = udpSocket->bind(QHostAddress("192.168.101.004"),8060);
    
    connect(udpSocket, SIGNAL(readyRead()),this,SLOT(processPendingDatagrams()));
    
    ...
    void processPendingDatagrams()
    {
    while(udpSocket->hasPendingDatagrams())
    QByteArray datagram;
    datagram.resize(udpSocket->pendingDatagramSize());
    udpSocket->readDatagram(datagram.data(),datagram.size());
    ...
    }

    Dies funktioniert nicht, da bind false zurückliefert. Was funktioniert, ist, wenn ich die Zeile
    bool suc = udpSocket->bind(QHostAddress("192.168.101.004"),8060);
    durch
    bool suc = udpSocket->bind(QHostAddress::Any,8060);
    austausche.
    Aber dann bekomme ich auch von jeder IP alle Daten.
    Wenn ich das genau sehe, mache ich den gleichen Fehler wie auf
    http://www.qtcentre.org/threads/19755-QUdpSocket-binding-doesn-t-work ?

    Wie kann ich jetzt eine bestimmte IP herausfiltern bzw. nur Nachrichten von einer bestimmten IP empfangen?

    Viele Grüße und vielen Dank im Voraus
    Sebastian







  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Bei
    bind()
    kannst du zwar eine IP angeben, aber auf diese IP bindest du dich. Das muss also eine IP deines Rechners sein, und interessant für dich ist das erst dann, wenn du mehr als eine Netzwerkschnittstelle hast. Nimm dort ANY.

    Wenn du dann nur von einer gewissen IP (Gegenüber, nicht lokale Netzwerkschnittstelle) ein Paket empfangen willst, dann musst du das Paket empfangen und dann über den Absänder filtern, ob du das Paket haben willst.

    EDIT: willst du die Pakete wirklich von einem bestimmten Port (= Absender) empfangen, oder eher an einem bestimmten Port (= Ziel)? Letzteres wäre sinnvoller und auch das einzig einfach Mögliche, und ganz nebenbei auch das was du gerade programmiert hast.

    Beitrag zuletzt geändert: 12.1.2015 11:19:57 von hackyourlife
  4. Autor dieses Themas

    sebastian-online

    sebastian-online hat kostenlosen Webspace.

    Hallo hackyourlife,

    vielen Dank für die schnelle und kompetente Antwort.

    Wenn jemand interessiert ist, wie man die IP des Senders herausbekommt:
    http://stackoverflow.com/questions/5870521/qt-network-broadcasting-question-to-get-sender-ip


    Viele Grüße
    Sebastian
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!