QT, czyli jak obsługiwać QTcpSocket

Odpowiedz Nowy wątek
2012-06-25 17:01
boroowa
0

Cześ!

Mam do Was bardzo ważne pytanie. Korzystam z QT by zaprogramować prosty serwer - chcę, żeby klient podane przeze mnie dwie liczby (x i y) wysłał jako dane do serwera, ten, żeby je dodał ze sobą i odesłał klientowi. Swój kod w większości oparłem na Threated Fortune Server i Fortune Client. Jednakże zamiast tamtej funkcji run, która jest w fortunethread.h dałem poniższą:

...

void FortuneThread::run()
{
    //emit msgSignal(QString::number(socketDescriptor));
    readFromSocket();
}

void FortuneThread::readFromSocket()
{
    //QString numbers;

    QTcpSocket tcpSocket;

    if (!tcpSocket.setSocketDescriptor(socketDescriptor)) {
         emit error(tcpSocket.error());
         return;
     }

     if(tcpSocket.isReadable()) //(1)
     {
        QDataStream in(&tcpSocket);
        in.setVersion(QDataStream::Qt_4_0);

        QString numbers;

        QByteArray arr;

        in >> arr;

        QString k (arr.data());

         //ten sygnał wyświetla po prostu okienko dialogowe z komunikatem, który jest w parametrze
        emit msgSignal("Deskryptor: " + QString::number(socketDescriptor) + "\nDane: " + k); 
    }
    else
    {
        emit msgSignal("asdfghjklasdfghjkl");
    }

    tcpSocket.disconnectFromHost();
    tcpSocket.waitForDisconnected();
}

...

a w kliencie staram się wysłać dane do serwera (po naciśnięciu przycisku getFortuneButton) w taki oto sposób:


void Client::writeToSocket(){

        tcpSocket->connectToHost(hostLineEdit->text(),
                                 portLineEdit->text().toInt()); 

        QString num = (x + " " + y);
        QByteArray tab = num.toAscii();

        // QMessageBox b;
        // b.setText(x + " + " + y);
        // b.exec();

        tcpSocket->write(tab);
        tcpSocket->disconnectFromHost();
        tcpSocket->close();
}

Pomimo, że soket w serwerze jest otwarty i wchodzi do ifa (1) to wyświetla mi numer deskryptora, ale wysłanych danych nie.
Czy mógłby mi ktoś poinstruować, dlaczergo to nie działa?

Z góry dziękuję za pomoc

BTW, wszystko się kompiluje i w ogóle, tylko prawdopodobnie nie może się to połączyć. Nie do końca rozumiem działania QTcpSocket'ów i czy można je tak łączyć, jak "rurki z danymi", żeby był jakiś przepływ.

Jeszcze raz dzięki za pomoc :)

Pozostało 580 znaków

2012-06-30 19:01
0

Potrzebujesz QTcpSocket w kliencie i i QTcpServer w serwerze. Nie możesz połączyć dwóch socketów.

Pozostało 580 znaków

2012-06-30 19:39
0

http://blog.matthew.org.pl/2010/03/13/kurs-qt-czesc-7-tcp/


Zero litości dla nieróbstwa.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0