Sockets, dem Clienten einfach seine Nachricht zurückschicken
Verfasst: 14. September 2007 01:56
Hi,
ich bastel mir hier einen Server, aufbauend auf dem ThreadedFortuneServer.
Aus der server.cpp:
So, der Thread sieht dann mittlerweile so aus:
Das ganze läuft unter Windows mit Dev-C++, falls das hier was zur Sache tut.
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?
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?