Ich möchte eine Client-Server Kommunikation über TCP implementieren. Dabei erstellt der Server für jeden neuen Client einen eigenen Thread um mit ihm zu kommunizieren.
Verbindet sich ein Client mit dem Server, erhalte ich vom QTcpServer im Hauptthread einen Zeiger auf den QTcpSocket. Diesen übergebe ich an den jeweiligen Client-Thread über den Socketdeskriptor.
Innerhalb von run() des QThread:
Code: Alles auswählen
m_socket = new QTcpSocket();
m_socket->setSocketDescriptor(m_descriptor);Der Client funktioniert ähnlich. Er nutzt auch einen Thread (Klasse TcpThread), der für die Tcp Kommunikation zuständig ist.
Innerhalb von run() des QThread:
Code: Alles auswählen
m_socket = new QTcpSocket();
m_socket->connectToHost(m_hostName, m_port);Code: Alles auswählen
QTcpSocket* TcpThread::getSender()
{
if (m_sender==NULL)
{
m_sender = new QTcpSocket();
m_sender->setSocketDescriptor(m_socket->socketDescriptor());
}
return m_sender;
}Code: Alles auswählen
while (!m_error)
{
if (m_socket->waitForReadyRead())
{
QByteArray data = m_socket->readAll();
emit receive(data);
}
}Die Threads sind sozusagen die meiste Zeit im wait Zustand und dafür zuständig, Daten zu empfangen.
Das funktioniert in den meisten Fällen wunderbar, jedoch nicht immer. Manchmal empfange ich leere Pakete (0 bytes).
Dies passiert in etwa 10-20% aller Fälle wenn ich vom Client zum Server sende.
Ich bin echt ratlos und weiß nicht, woran es liegen könnte. Es wird zwar etwas empfangen, jedoch nur "leere" Daten. Und das völlig willkürlich.
Ich wär Euch echt sehr dankbar, wenn ihr mir dabei helfen könnt.
Viele Grüße,
Daniel