• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Qt: mit UDP schreiben und lesen?

K4m1K4tz3

Advanced Hacker
Ich möchte einen kleinen Gamebrowser schreiben um C++ und Qt4 etwas kennen zu lernen. Das Programm holt sich von dieser Seite http://etqw-ipgetter.demonware.net/ipgetter/ alle IPs und soll alle Server abfragen nach deren Einstellungen und Spielern. Die IPs und Ports filtere ich so heraus:

Code:
QList<QByteArray> serverIpList;
QList<QByteArray> actualServerAdress;

actualServerAdress = serverIpList[0].split(':'); //IP und Port trennen
actualAddress.setAddress(actualServerAdress[0].data());
actualPort = actualServerAdress[1].toInt(0, 10);

Um dan dem Server folgendes zu schicken:

Code:
QByteArray datagramOut;
datagramOut.resize(10);
datagramOut[0] = 0xFF;
datagramOut[1] = 0xFF;
datagramOut[2] = 0x67;
datagramOut[3] = 0x65;
datagramOut[4] = 0x74;
datagramOut[5] = 0x49;
datagramOut[6] = 0x6E;
datagramOut[7] = 0x66;
datagramOut[8] = 0x6F;
datagramOut[9] = 0x00;
udpSocket = new QUdpSocket(this);
udpSocket->bind(actualAddress, actualPort);
qDebug() << "Sending:" << datagramOut.data();
udpSocket->writeDatagram(datagramOut.data(), datagramOut.size(), actualAddress, actualPort);
	
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readServerinformations()));
connect(udpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
	this, SLOT(displayError(QAbstractSocket::SocketError)));

Nach der Beschreibung http://www.return1.net/site/news/read/13/ müsste der Server mir nun antworten, tut er aber nicht. Das Signal "readyRead" wird nicht ausgelöst aber auch kein "error". Also was mache ich falsch?

Danke schonmal.
 

}-Tux-{

Hacker
Code:
udpSocket->writeDatagram(datagramOut.data(), datagramOut.size(), actualAddress, actualPort);
	
connect(udpSocket, SIGNAL(readyRead()), this, SLOT(readServerinformations()));
connect(udpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
	this, SLOT(displayError(QAbstractSocket::SocketError)));

Hmm ich kenne mich mit Qt zwar nicht wirklich aus, allerdings glaube ich, dass du dort einen kleinen Denkfehler hast. Du sendest erst ein Datagram Packet und setzt erst danach die Signals/Slots.

}-Tux-{
 
OP
K

K4m1K4tz3

Advanced Hacker
Mh stimmt danke, naja ein dummer Fehler von mir.

Jedenfalls habe ich jetzt dadurch eine Fehlermeldung erhalten und habe somit herausgefunden, dass das so nicht geht. Ich verbinde mich jetzt mit "connectToHost" und es klappt. Danke dafür ;-)
 
Oben