QTcpSocket auf dem Heap anlegen?
Verfasst: 21. Mai 2008 17:56
Hallo,
habe ein Programm geschrieben was bei jeder eingehenden Clientverbindung eines QServerSocket einen Thread erzeugt, der dann die Clientkommunikation abwickelt.
In diesem "ClientThread" hab ich jetzt zwei möglichkeiten probiert. Einmal den Socket mit
QTcpsocket tcpSocket;
und einmal mit
QTcpsocket *tcpSocket; und später tcpSocket = new QTcpSocket();
erzeugt.
Also im zweiten Fall dynamisch auf dem Heap.
Hänge auch nochmal beide CPP Dateien hier an. Mir sind die Vor- und Nachteile dieser zwei Möglichkeiten noch nicht so wirklich klar. Vielleicht kann jemand was dazu sagen.
Fall 1: Socket mit "QTcpSocket tcpSocket" in der Header.
Fall 2: Socket mit "QTcpSocket *tcpSocket" in der Header.
habe ein Programm geschrieben was bei jeder eingehenden Clientverbindung eines QServerSocket einen Thread erzeugt, der dann die Clientkommunikation abwickelt.
In diesem "ClientThread" hab ich jetzt zwei möglichkeiten probiert. Einmal den Socket mit
QTcpsocket tcpSocket;
und einmal mit
QTcpsocket *tcpSocket; und später tcpSocket = new QTcpSocket();
erzeugt.
Also im zweiten Fall dynamisch auf dem Heap.
Hänge auch nochmal beide CPP Dateien hier an. Mir sind die Vor- und Nachteile dieser zwei Möglichkeiten noch nicht so wirklich klar. Vielleicht kann jemand was dazu sagen.
Fall 1: Socket mit "QTcpSocket tcpSocket" in der Header.
Code: Alles auswählen
//FILE: clientThread.cpp
#include "clientThread.h"
#include <QtNetwork>
ClientThread::ClientThread(int socketDescriptor, QObject *parent)
: QThread(parent), socketDescriptor(socketDescriptor)
{
qDebug("***ClientThread constructed***");
connect(&tcpSocket, SIGNAL( readyRead() ), this, SLOT( readFortune() ) );
connect(&tcpSocket, SIGNAL( disconnected() ), this, SLOT( setDisconnect() ) );
connect(this, SIGNAL( finished() ), this, SLOT( deleteLater() ) );
if( !tcpSocket.setSocketDescriptor( socketDescriptor ) )
{
emit error(tcpSocket.error());
return;
}
//sendWelcome();
qDebug() << "Client Address: " << tcpSocket.peerAddress().toString();
}
Code: Alles auswählen
//FILE: clientThread.cpp
#include "clientThread.h"
#include <QtNetwork>
ClientThread::ClientThread(int socketDescriptor, QObject *parent)
: QThread(parent), socketDescriptor(socketDescriptor)
{
tcpSocket = new QTcpSocket();
qDebug("***ClientThread constructed***");
connect(tcpSocket, SIGNAL( readyRead() ), this, SLOT( readFortune() ) );
connect(tcpSocket, SIGNAL( disconnected() ), this, SLOT( setDisconnect() ) );
connect(this, SIGNAL( finished() ), this, SLOT( deleteLater() ) );
if( !tcpSocket->setSocketDescriptor( socketDescriptor ) )
{
emit error(tcpSocket->error());
return;
}
//sendWelcome();
qDebug() << "Client Address: " << tcpSocket->peerAddress().toString();
}