QT, czyli jak obsługiwać QTcpSocket

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

0

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

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