[QT] Aplikacja klient serwer

0

Z racji że dopiero zaczynam programować w QT napisałem aplikacje klient serwer. Chciałbym ją krok po kroku ulepszyć (dodać GUI itp). Na wstępie całkowicie nie wiem jak zmusić serwer do działania współbieżnego. Macie jakieś doświadczenie ?

0

serwer.cpp


#include "zmienneserwer.h"

CQTSerwer::CQTSerwer(int port, int backlog, QObject parent, const char name)
: CSocketServer(port, backlog, parent, name)
{
connect(this, SIGNAL(newConnect(CSocketClient
)), SLOT(newConnect_slot(CSocketClient
)));
}

void CQTSerwer::newConnect_slot(CSocketClient *s)
{
qWarning("Podłączono klienta z numeru IP %s:%i", s->address().toString().latin1(), s->port());
connect(s, SIGNAL(connectionClosed()), this, SIGNAL(finished()));
new CQTSerwerClient(s);
}

serwerclient.cpp


#include "zmienneserwerclient.h"

CQTSerwerClient::CQTSerwerClient(CSocketClient *client)
: m_pClient(client)
{
connect(client, SIGNAL(message(const QVariant &)), SLOT(message_slot(const QVariant &)));
connect(client, SIGNAL(connectionClosed()), SLOT(connectionClosed_slot()));
qWarning("Podłączono klienta.");
}

void CQTSerwerClient::message_slot(const QVariant &msg)
{
QMap<QString, QVariant> data;
data = msg.toMap();

QMap<QString, QVariant>::Iterator it;
for (it = data.begin(); it != data.end(); ++it)
{
	if (QFile::exists(it.key()))
	{
                    qWarning("Plik istnieje już na serwerze");
	}
	else
	{
		QFile file(it.key());
		if (file.open(IO_WriteOnly | IO_Truncate))
		{
			file.writeBlock(it.data().toByteArray());
			file.close();

                            qWarning("==> %s zapis.", it.key().latin1());
		}
		else
		{
                            qWarning("Nie można otworzyć pliku %s", it.key().latin1());
		}
	}
}

}

void CQTSerwerClient::connectionClosed_slot()
{
qWarning("Połączenie klienta zakończone.");
}

Main.cpp


#include <qaccel.h>
#include <qapplication.h>
#include "zmienneserwer.h"

int main(int argc, char **argv)
{
QApplication a(argc, argv, false);

int port = 54321;
if (argc>1)
	port = QString(argv[1]).toInt();
else
            qWarning("Nie wybrałeś portu serwera: Domyślny port to 54321 ");
            qWarning("Aby uruchomić serwer na wybranym przez siebie porcie\npodaj go po wywołaniu programu");
            qWarning("\nPrzykład ./serwer <port>");
            qWarning("Uruchamianie serwera na porcie: %i", port);

    CQTSerwer server(port);
if (server.ok())
{
            qWarning("Serwer uruchomiony.");
            qWarning("Oczekiwanie na połączenie Klienta");
	QObject::connect(&server, SIGNAL(finished()), &a, SLOT(quit()));
	return a.exec();
}

return 0;

}

Zmienneserwer.h


#ifndef CQTSERWER_H
#define CQTSERWER_H

#include "../socket/socket.h"

#include "zmienneserwerclient.h"

class CQTSerwer : public CSocketServer
{
Q_OBJECT

public:
CQTSerwer(int port, int backlog = 50, QObject *parent = 0, const char *name = 0);

private slots:
void newConnect_slot(CSocketClient *s);

signals:
void finished();
};

#endif

zmienneserwerclient


#ifndef CQTSERWERCLIENT_H
#define CQTSERWERCLIENT_H

#include <qfile.h>
#include <qvariant.h>

#include "../socket/socket.h"

class CQTSerwerClient : QObject
{
Q_OBJECT

public:
CQTSerwerClient(CSocketClient *client);

public slots:
void message_slot(const QVariant &msg);
void connectionClosed_slot();

private:
CSocketClient *m_pClient;
};

#endif

1 użytkowników online, w tym zalogowanych: 0, gości: 1