ein altes Problem: Qudpsocket bind (gelöst)(prog added)
Verfasst: 2. September 2010 12:38
ADDED: habe ein kleines udp-receive-programm hinzugefügt... vll kann es ja mal jemand brauchen!
hallo,
mal wieder ein altes Problem. Ich bin relativ neu in QT und wollte UDP Pakete auslesen. Hab hier schon viel rumgesucht, konnte es aber bisher nur schaffen, die Verbindung aufzubauen!
1) ich bekomme von einer Ethernet Schnittstelle UPD packete geliefert. Das sagt mir ein Dienstprogramm vom Mac:
udp:
469051 datagrams received
0 with incomplete header
0 with bad data length field
7 with bad checksum
2771 dropped due to no socket
142984 broadcast/multicast datagrams dropped due to no socket
0 dropped due to full socket buffers
0 not for hashed pcb
323289 delivered
342323 datagrams output
2) in Folgendem Code wird eine Verbindung aufgebaut (Das funktioniert)
Frage: Muß ich erst ein UPD Packet senden, bevor ich eines empfangen kann? Wie funktioniert das?
3) Ansonsten kommt kein readyRead() und keine Ausgabe
4) Das Beispiel stammt aus der qt example Bibliothek. (receiver.cpp)
Wär schön, wenn sich das jemand kurz anschauen könnte. Viel sollt ja nicht mehr fehlen eigentlich.
Danke!
hallo,
mal wieder ein altes Problem. Ich bin relativ neu in QT und wollte UDP Pakete auslesen. Hab hier schon viel rumgesucht, konnte es aber bisher nur schaffen, die Verbindung aufzubauen!
1) ich bekomme von einer Ethernet Schnittstelle UPD packete geliefert. Das sagt mir ein Dienstprogramm vom Mac:
udp:
469051 datagrams received
0 with incomplete header
0 with bad data length field
7 with bad checksum
2771 dropped due to no socket
142984 broadcast/multicast datagrams dropped due to no socket
0 dropped due to full socket buffers
0 not for hashed pcb
323289 delivered
342323 datagrams output
2) in Folgendem Code wird eine Verbindung aufgebaut (Das funktioniert)
Frage: Muß ich erst ein UPD Packet senden, bevor ich eines empfangen kann? Wie funktioniert das?
3) Ansonsten kommt kein readyRead() und keine Ausgabe
4) Das Beispiel stammt aus der qt example Bibliothek. (receiver.cpp)
Wär schön, wenn sich das jemand kurz anschauen könnte. Viel sollt ja nicht mehr fehlen eigentlich.
Danke!
Code: Alles auswählen
#include <QtGui>
#include <QtNetwork>
#include "receiver.h"
Receiver::Receiver(QWidget *parent)
: QDialog(parent)
{
statusLabel = new QLabel(tr("Listening for broadcasted messages"));
quitButton = new QPushButton(tr("&Quit"));
udpSocket = new QUdpSocket(this);
// udpSocket->bind(45454, QUdpSocket::ShareAddress);
//udpSocket->bind(QHostAddress::LocalHost, 7755);
if(!udpSocket->bind(QHostAddress("169.254.175.42"), 3689, QUdpSocket::ShareAddress) )
{
QMessageBox::information(NULL, "","can't bind server");
}
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("Broadcast 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()));
}
}