readyRead() not triggering
-
I am currently tring to send packets to a server and then receive some. I currently got it so that I send the data and the server then replys but I cant get connect to trigger with readyRead().
I have wireshark that is catching the send and the servers reply but my program will not get anything.
//main.cpp void MainWindow::on_ServerListRefreshButton_clicked() { MyUDP client; client.SendRequest("193.192.58.145:27315"); }
// myudp.cpp #include "myudp.h" #include <QDebug> MyUDP::MyUDP(QObject *parent) : QObject(parent) { // create a QUDP socket socket = new QUdpSocket(this); // The most common way to use QUdpSocket class is // to bind to an address and port using bind() // bool QAbstractSocket::bind(const QHostAddress & address, // quint16 port = 0, BindMode mode = DefaultForPlatform) //socket->bind(QHostAddress::LocalHost, 1234); socket->bind(QHostAddress("193.192.58.145"),27315); connect(socket, SIGNAL(readyRead()), this, SLOT(AreadyRead())); } void MyUDP::SendRequest(QString ip) { //Split ip and port QString host = ip.left(ip.indexOf(":")); int port = 27015; if(ip.contains(":")) port = QString(ip.right(ip.size()-ip.indexOf(":")-1)).toInt(); //QByteArray Data; char* Data = "\xff\xff\xff\xff\x54\x53\x6f\x75\x72\x63\x65\x20\x45\x6e\x67\x69\x6e\x65\x20\x51\x75\x65\x72\x79\x00"; // Sends the datagram datagram // to the host address and at port. // qint64 QUdpSocket::writeDatagram(const QByteArray & datagram, // const QHostAddress & host, quint16 port) socket->writeDatagram(Data, 25,QHostAddress(host),port); } void MyUDP::AreadyRead() { // when data comes in QByteArray buffer; QHostAddress sender; quint16 senderPort; while (socket->hasPendingDatagrams()){ buffer.fill(0,socket->pendingDatagramSize()); // qint64 QUdpSocket::readDatagram(char * data, qint64 maxSize, // QHostAddress * address = 0, quint16 * port = 0) // Receives a datagram no larger than maxSize bytes and stores it in data. // The sender's host address and port is stored in *address and *port // (unless the pointers are 0). socket->readDatagram(buffer.data(), buffer.size(), &sender, &senderPort); qDebug() << "Message from: " << sender.toString(); qDebug() << "Message port: " << senderPort; qDebug() << "Message: " << buffer; } }
// myudp.h #ifndef MYUDP_H #define MYUDP_H #include <QObject> #include <QUdpSocket> class MyUDP : public QObject { Q_OBJECT public: explicit MyUDP(QObject *parent = 0); void SendRequest(QString ip); signals: public slots: void AreadyRead(); private: QUdpSocket *socket; }; #endif // MYUDP_H
-
@fennec said:
//main.cpp
void MainWindow::on_ServerListRefreshButton_clicked()
{
MyUDP client;client.SendRequest("193.192.58.145:27315");
}
This slot is called, client instantiated. request sent, client is destroyed, cause goes out of scope.
client is not going to get out of the grave and listen to anything I think,