Solved it finally!
Now writing and reading are running in one different thread 
I'm thankful for every improvement. 
Now the Source code:
multiserver.cpp
#include "multiserver.h"
MultiServer
::MultiServer(QObject *parent
){
}
MultiServer::~MultiServer()
{
delete server;
}
void MultiServer::incomingConnection(int socketDescriptor)
{
qDebug
() <<
"MultiServer thread " <<
QThread::currentThreadId ();
server = new ServerThread(socketDescriptor);
connect(server, SIGNAL(finished()), server, SLOT(deleteLater()));
server->start();
}
#include "multiserver.h"
MultiServer::MultiServer(QObject *parent)
: QTcpServer(parent)
{
}
MultiServer::~MultiServer()
{
delete server;
}
void MultiServer::incomingConnection(int socketDescriptor)
{
qDebug() << "MultiServer thread " << QThread::currentThreadId ();
server = new ServerThread(socketDescriptor);
connect(server, SIGNAL(finished()), server, SLOT(deleteLater()));
server->start();
}
To copy to clipboard, switch view to plain text mode
serverthread.cpp
#include "serverthread.h"
ServerThread::ServerThread(int socketDescriptor)
, m_socketDescriptor(socketDescriptor)
{
QObject::moveToThread(this);
//destroy the obsolete thread qDebug
() <<
"ServerThread " <<
QThread::currentThreadId ();
}
ServerThread::~ServerThread ()
{
stop();
delete serverSocket;
}
void ServerThread::stop()
{
this->quit();
this->wait();
}
void ServerThread::run()
{
serverSocket = new ServerTcpSocket();
if (!serverSocket->setSocketDescriptor(m_socketDescriptor)) {
emit error(serverSocket->error(), serverSocket->errorString());
qDebug() << "setSocketDescriptor error : " << serverSocket->error() << endl;
return;
}
connect(serverSocket, SIGNAL(dataAvailable()), this, SLOT(writeData()));
this->exec();
}
void ServerThread::writeData()
{
qDebug() << "writing thread" << currentThreadId ();
QString msg
= "Message from Server\n";
//Todo just for debug purpose qint64 blockSize = msg.size();//Todo just for debug purpose
serverSocket->write(msg.toAscii().data(),blockSize);
}
#include "serverthread.h"
ServerThread::ServerThread(int socketDescriptor)
: QThread()
, m_socketDescriptor(socketDescriptor)
{
QObject::moveToThread(this); //destroy the obsolete thread
qDebug() << "ServerThread " << QThread::currentThreadId ();
}
ServerThread::~ServerThread ()
{
stop();
delete serverSocket;
}
void ServerThread::stop()
{
this->quit();
this->wait();
}
void ServerThread::run()
{
serverSocket = new ServerTcpSocket();
if (!serverSocket->setSocketDescriptor(m_socketDescriptor)) {
emit error(serverSocket->error(), serverSocket->errorString());
qDebug() << "setSocketDescriptor error : " << serverSocket->error() << endl;
return;
}
connect(serverSocket, SIGNAL(dataAvailable()), this, SLOT(writeData()));
this->exec();
}
void ServerThread::writeData()
{
qDebug() << "writing thread" << currentThreadId ();
QString msg = "Message from Server\n";//Todo just for debug purpose
qint64 blockSize = msg.size();//Todo just for debug purpose
serverSocket->write(msg.toAscii().data(),blockSize);
}
To copy to clipboard, switch view to plain text mode
servertcpsocket.cpp
#include "servertcpsocket.h"
ServerTcpSocket
::ServerTcpSocket(QObject *parent
){
connect(this, SIGNAL(readyRead()), this, SLOT(readData()));
connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater()));
}
void ServerTcpSocket::readData()
{
qDebug
() <<
"reading thread" <<
QThread::currentThreadId ();
qint64 bytes = buffer->write(this->readAll());
buffer->seek(buffer->pos() - bytes);
while (buffer->canReadLine())
{
qDebug() << line;
}
emit dataAvailable();
}
#include "servertcpsocket.h"
ServerTcpSocket::ServerTcpSocket(QObject *parent)
: QTcpSocket(parent)
{
buffer = new QBuffer();
buffer->open(QIODevice::ReadWrite);
connect(this, SIGNAL(readyRead()), this, SLOT(readData()));
connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater()));
}
void ServerTcpSocket::readData()
{
qDebug() << "reading thread" << QThread::currentThreadId ();
qint64 bytes = buffer->write(this->readAll());
buffer->seek(buffer->pos() - bytes);
while (buffer->canReadLine())
{
QString line = buffer->readLine();
qDebug() << line;
}
emit dataAvailable();
}
To copy to clipboard, switch view to plain text mode
Bookmarks