ich will mir eine einfache Chatanwendung programmieren. Den Client habe ich soweit fertig gestellt und nun bin ich dabei, den Server zu schreiben. Allerdings habe ich folgendes Problem, und ich verstehe einfach nicht, warum es nicht klappen will:
Der Client kann sich erfolgreich mit dem Server verbinden, und der Server schickt "hello new client", was der Client auch empfängt. Bis "new client wants to connect and sended NEW" läuft auch alles ohne Probleme durch und die entsprechenden Meldungen erscheinen auch. Schicke ich nun mit dem Client etwas an den Server, wird readyRead() ausgelöst und "new client wants to connect and sended NEW" ausgegeben, der Client empfängt jedoch dann nichts und "c" wird nicht ausgegeben. Nehme ich das raus, hängt er beim Senden, wieder wird "c" nicht ausgegeben und der Client empfängt nichts.
Ich habe einfach keine Ahnung, wo der Fehler liegt, denn am Client liegt es anscheinend nicht und der Server kann auch versenden und das readyRead() Signal wird ausgelöst.
Hier noch der Code:
italk.cpp
Code: Alles auswählen
#include "italk.h"
italk::italk(QMainWindow *parent) : QMainWindow(parent)
{
setupUi(this);
connect(actionAbout, SIGNAL (triggered()), this, SLOT(showAbout()));
connect(actionAboutQt, SIGNAL (triggered()), qApp, SLOT(aboutQt()));
connectionStatusBar->showMessage(QString(tr("Nicht verbunden.")));
setServerOnline();
}
italk::~italk()
{
}
void italk::setServerOnline()
{
commandServer = new QTcpServer(this);
commandServer->listen(QHostAddress::Any,51238);
connect(commandServer, SIGNAL(newConnection()), this, SLOT(newClient()));
}
void italk::newClient()
{
cout << "new client" << endl;
if (commandServer->hasPendingConnections())
{
QTcpSocket *clientSocket = commandServer->nextPendingConnection();
connect(clientSocket, SIGNAL(readyRead()), this, SLOT(recieveCommand()));
cout << "a" << endl;
clientSocket->write("hello new client");
cout << "b" << endl;
}
else
cout << "no pending connections";
}
void italk::recieveCommand()
{
cout << "new client wants to connect and sended NEW" << endl;
QString message(clientSocket->readAll());
cout << "c" << endl;
cout << message.toStdString() << endl;
clientSocket->write("OK");
}italk.h
Code: Alles auswählen
#ifndef italk_H
#define italk_H
#include "ui_italk.h"
#include "logfile.h"
#include <iostream>
#include <fstream>
#include <string>
#include <stdlib.h>
#include <QtGui>
#include <QString>
#include <QTranslator>
#include <QTimer>
#include <QKeyEvent>
#include <QtNetwork>
#include <QDataStream>
#include <QByteArray>
#include <QHostAddress>
#include <QAbstractSocket>
#include <QTcpSocket>
#include <QTcpServer>
using namespace std;
class italk : public QMainWindow, public Ui::MainWindow
{
Q_OBJECT
public:
italk(QMainWindow *parent = 0);
~italk();
QTcpServer *commandServer;
QTcpSocket *clientSocket;
private slots:
void setServerOnline();
void newClient();
void recieveCommand();
};
#endif