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 :)