void ClientThread1::run() {
do {
if(quit_thread) {
return;
}
socket.connectToHost(ip, port);
if(time.elapsed() > emitTimeOut) {
//emit updateStatus(" Connecting to ..tsg..");
time.restart();
}
}while (!socket.waitForConnected(timeOut));
emit dataReady("<b><font color=\"green\">Connected to Server1</font></b>");//display in gui
emit socketConnected();
connect(&socket, SIGNAL(disconnected()), this, SLOT(reStartThread()));
//the events for the sockets is handled in SocketHandler
SocketHandler socketHandler(&socket);
//forward the data to SocketHandler which is received from other thread
connect(this,
SIGNAL(writeFramesReady
(QByteArray)),
&socketHandler,
SLOT(writeData
(QByteArray)), Qt
::QueuedConnection);
//send the data to other threads
connect(&socketHandler,
SIGNAL(readFramesReady
(QByteArray)),
this,
SIGNAL(readFramesReady
(QByteArray)));
//some more connections.
exec();
}
SocketHandler
::SocketHandler(QTcpSocket *socket
) : socket
(socket
){
connect(socket, SIGNAL(readyRead()), this, SLOT(readData()));
}
void SocketHandler::readData()
{
receivedBytes += socket->readAll();
//parse the data
if(/*some logic of the received data*/) {
emit dataForThread2(byteArray);
} else {
emit dataForThread3(byteArray);
}
}
void SocketHandler
::writeData(QByteArray byteArray
) {
socket->write(byteArray);
}
void ClientThread1::run() {
QTcpSocket socket;
do {
if(quit_thread) {
return;
}
socket.connectToHost(ip, port);
if(time.elapsed() > emitTimeOut) {
//emit updateStatus(" Connecting to ..tsg..");
time.restart();
}
}while (!socket.waitForConnected(timeOut));
emit dataReady("<b><font color=\"green\">Connected to Server1</font></b>");//display in gui
emit socketConnected();
connect(&socket, SIGNAL(disconnected()), this, SLOT(reStartThread()));
//the events for the sockets is handled in SocketHandler
SocketHandler socketHandler(&socket);
//forward the data to SocketHandler which is received from other thread
connect(this, SIGNAL(writeFramesReady(QByteArray)), &socketHandler, SLOT(writeData(QByteArray)), Qt::QueuedConnection);
//send the data to other threads
connect(&socketHandler, SIGNAL(readFramesReady(QByteArray)), this, SIGNAL(readFramesReady(QByteArray)));
//some more connections.
exec();
}
SocketHandler::SocketHandler(QTcpSocket *socket) : socket(socket)
{
connect(socket, SIGNAL(readyRead()), this, SLOT(readData()));
}
void SocketHandler::readData()
{
receivedBytes += socket->readAll();
//parse the data
if(/*some logic of the received data*/) {
emit dataForThread2(byteArray);
} else {
emit dataForThread3(byteArray);
}
}
void SocketHandler::writeData(QByteArray byteArray)
{
socket->write(byteArray);
}
To copy to clipboard, switch view to plain text mode
The ServerThread is also implemented in the same fashion except that the server listens on a port instead of connecting to client.
Bookmarks