Seite 1 von 1

Qt und Telnet

Verfasst: 17. März 2007 21:28
von ReALITY5
Ich versuche gerade schon die ganze Zeit einen telnet clienten in Qt zu schreiben. Doch der Server antwortet mir nicht bzw ich bin mir nicht mal sicher ob auch das ankommt was ich senden will.

Code: Alles auswählen

void MainWindow::setConnected()
{
    statusBar()->showMessage(tr("successfully connected to %1 on Port %2").arg(Ip).arg(Port),2000);
    //Dem Server bytes schicken
    QByteArray block;
    QDataStream out(&block,QIODevice::WriteOnly);
    out.setVersion(QDataStream::Qt_4_1);
    const char query[50]="sl\n";
    out<<query;
    out.device()->seek(0);
    socket->write(block);
    socket->waitForReadyRead(-1);
    //vom Server bytes bekommen
    QDataStream in(socket);
    QString nextBlock;
    in.setVersion(QDataStream::Qt_4_1);
    for(int i=0;i<5;i++)
    {
    	if(socket->bytesAvailable() > sizeof(char))
    	{
            in>>nextBlock;
    	}
    }
    cout<<nextBlock.toStdString();
}
jemand ideen was ich da ändern muss und ob ich wenigstens etwas richtig gemacht hab?

Verfasst: 17. März 2007 21:51
von Christian81
Das kann so nicht gehen da nie die Qt-Eventloop abgearbeitet wird. Benutze normal signals & slots.

Verfasst: 17. März 2007 21:59
von ReALITY5
In der Doku sehe ich keine Ansprechenden Signals für QTcpSocket,

Verfasst: 17. März 2007 22:02
von Christian81

Verfasst: 17. März 2007 22:23
von ReALITY5
Gibt es irgendeine möglichkeit, das Programm solange zu blockieren bis ein Event auftritt sowas wie

Code: Alles auswählen

    if(was_emit(clicked()))
   {
       cout<<"button wurde geklickt"<<endl
   }
und wie muss ich die Daten speichern, die ich vom Server bekomme?
Ich würde sie in nem char* speichern, aber das geht irgendwie nicht so gut
und wenn ich sie in nem QBytearray speicher, kommen nur whitespaces als ausgabe

Verfasst: 17. März 2007 23:16
von Christian81
ReALITY5 hat geschrieben:Gibt es irgendeine möglichkeit, das Programm solange zu blockieren bis ein Event auftritt
Das ist Blödsinn - beschäftige Dich bitte mit dem Sinn von Signals & Slots.
QByteArray ist ok - da kommen wohl deine Daten nicht korrekt an oder sowas in der Art

Verfasst: 17. März 2007 23:30
von ReALITY5
naja, habs mit Signals und slots gelöst. Wollte halt sowas blockierendes haben, weil cih eine ComboBox mit der Antwort des Servers initalisieren wollt.

Verfasst: 17. März 2007 23:31
von Christian81
Blockierend in einer GUI ist irgendwie nicht so sinnvoll, oder?
Es ist möglich, aber ...

Verfasst: 17. März 2007 23:56
von ReALITY5
mhh, stimmt schon, naja ich habs mit ner art status variable gemacht, wenn die einen wert ungleich 0 hat, werden Gui elemente initalisiert. Nicht die schönste art, aber es funktioniert

Verfasst: 18. März 2007 00:09
von Christian81
Ich verstehe es noch nicht so ganz - warum füllst du nicht einfach die ComboBox wenn die Daten angekommen sind und fertig?

Verfasst: 18. März 2007 00:18
von ReALITY5
weil es nicht immer die selben anfragen sind. ich will auch noch z.b. ne 2. Combobox initalisieren

Verfasst: 18. März 2007 00:28
von Christian81
Das stört doch aber nicht - zumindest wüsste ich nicht wie :)