ich bastel mir hier einen Server, aufbauend auf dem ThreadedFortuneServer.
Aus der server.cpp:
Code: Alles auswählen
void Server::incomingConnection(int socketDescriptor)
{
QString fortune = fortunes.at(qrand() % fortunes.size());
ServerThread *thread = new ServerThread(socketDescriptor, fortune, this);
connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
thread->start();
}
Code: Alles auswählen
#include "serverThread.h"
#include <QtNetwork>
ServerThread::ServerThread(int socketDescriptor, const QString &fortune, QObject *parent)
: QThread(parent), text(fortune) {
socket = new QTcpSocket;
socket->setSocketDescriptor(socketDescriptor);
}
ServerThread::~ServerThread() {
free(socket);
}
void ServerThread::run()
{
while (socket->state() == QTcpSocket::ConnectedState) {
if (socket->canReadLine()) {
readClient();
}
sleep(1);
}
socket->disconnectFromHost();
socket->waitForDisconnected();
}
void ServerThread::readClient() {
QString clientText(socket->readLine().data());
QByteArray block;
QDataStream out(&block, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_0);
out << (quint16)0;
out << clientText;
out.device()->seek(0);
out << (quint16)(block.size() - sizeof(quint16));
socket->write(block);
socket->flush();
}
Ich starte den Server und verbinde mich mit Telnet zu ihm.
Die erste Nachricht, die ich ihm mit Telnet schicke, schickt er auch brav zurück. Aber jede weitere ignoriert er. Warum?