Ich habe mir einen simplen TCP-Client geschrieben, bei dem der Verbindungsaufbau durch ein waitForConnected() zeitlich begrenzt wird. Jetzt soll nach Ablauf der eingestellten Zeit das error-Signal gesendet werden, welches ich dann in meinem Hauptfenster abfangen kann. So weit ganz einfach. Jetzt kommt es aber oft vor, dass nach einem Timeout scheinbar das Error-Signal nicht gesendet wird. Es passiert dann einfach nichts.
Code: Alles auswählen
Network::Network(QWidget *parent)
{
tcpSocket = new QTcpSocket(this);
...
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(socketError(QAbstractSocket::SocketError)));
connect(tcpSocket, SIGNAL(stateChanged(QAbstractSocket::SocketState)), this, SLOT(socketStateChanged(QAbstractSocket::SocketState)));
...
}
...
...
void Network::connectHost()
{
if (connected == true)
{
disconnectHost();
}
else
{
tcpSocket->abort();
tcpSocket->connectToHost(dstIp, dstPort);
if (!tcpSocket->waitForConnected(connectTimeout))
{
qWarning(QString("waitForConnected(): ").toLatin1() + tcpSocket->errorString().toLatin1()+" "+QString::number(tcpSocket->error()).toLatin1());
disconnectHost();
}
}
}
void Network::socketError(QAbstractSocket::SocketError err)
{
connected = false;
qWarning("Fehler");
emit onError(err);
}
void Network::socketStateChanged(QAbstractSocket::SocketState state)
{
qWarning(QString("Socket Status: "+QString::number(state)).toLatin1());
emit onStateChanged(state);
}
...
...
Code: Alles auswählen
Socket Status: 1
Socket Status: 2
Socket Status: 0
Fehler
Socket Status: 0
waitForConnected(): Socket operation timed out 5Code: Alles auswählen
Socket Status: 1
Socket Status: 2
Socket Status: 0
waitForConnected(): Socket operation timed out 5Gruß
Thorsten