Название: клиент-сервер Отправлено: sensey_molotok от Июнь 05, 2013, 20:26 Пишу программу "чат по локалке". Есть класс сервера:
class MyServer : public QDialog { Q_OBJECT private: QTcpServer* server; quint16 nextBlockSize; QMap<int, QTcpSocket *> users_list; QMap<int, QTcpSocket *>::iterator iter; public: MyServer(int port, QDialog *parent = 0); void sendToAllClient(QTime time, QString name, QString mes); private slots: void sl_NewConnection(); void sl_ReadClient(); void sl_onDestroy(); public slots: void sl_sendMessage(QString mes); }; есть класс клиента: class MyClient : public QDialog { Q_OBJECT public: MyClient(QHostAddress Host, int port, QDialog* parent = 0) ; QString getName(); void setName(QString name); void on_Disconnect(); private slots: void sl_ReadyRead(); void sl_Error(QAbstractSocket::SocketError); private: QTcpSocket* tcpSocket; quint16 nextBlockSize; QString name; }; В сервере есть функция подключения нового клиента: void MyServer::sl_NewConnection() { QTcpSocket * clientSocket = server->nextPendingConnection(); connect(clientSocket, SIGNAL(disconnected()), clientSocket, SLOT(deleteLater())); connect(clientSocket, SIGNAL(readyRead()),this, SLOT(sl_ReadClient())); int idDescriptor = clientSocket->socketDescriptor(); users_list[idDescriptor] = clientSocket; } как передать при подключении к серверу некий никнейм клиента, чтобы ассоциировать дескриптор клиента с его именем??? можно ли присвоить переменной tcpSocket из класса клиента это имя в некую скрытую переменную и потом в методу сервера изьять это имя? Название: Re: клиент-сервер Отправлено: mutineer от Июнь 05, 2013, 20:44 Передай по открытому сокету имя
Название: Re: клиент-сервер Отправлено: sensey_molotok от Июнь 05, 2013, 20:45 Передай по открытому сокету имя тоесть??Название: Re: клиент-сервер Отправлено: mutineer от Июнь 05, 2013, 20:47 то есть tcpSocket->write(...), например
Название: Re: клиент-сервер Отправлено: Old от Июнь 05, 2013, 20:55 QTcpSocket наследник QObject, поэтому можно сколько угодно всего передавать вместе с объектом.
bool QObject::setProperty(const char * name, const QVariant & value) QVariant QObject::property(const char * name) const Название: Re: клиент-сервер Отправлено: mutineer от Июнь 05, 2013, 21:04 QTcpSocket наследник QObject, поэтому можно сколько угодно всего передавать вместе с объектом. bool QObject::setProperty(const char * name, const QVariant & value) QVariant QObject::property(const char * name) const А каким образом это свойство должно попасть от клиента серверу? Название: Re: клиент-сервер Отправлено: Old от Июнь 05, 2013, 21:07 А каким образом это свойство должно попасть от клиента серверу? А надо от клиента серверу? :)Каюсь, я прочитал только это: можно ли присвоить переменной tcpSocket из класса клиента это имя в некую скрытую переменную и потом в методу сервера изьять это имя? :)Название: Re: клиент-сервер Отправлено: mutineer от Июнь 05, 2013, 21:08 А каким образом это свойство должно попасть от клиента серверу? А надо от клиента серверу? :)Каюсь, я прочитал только это: можно ли присвоить переменной tcpSocket из класса клиента это имя в некую скрытую переменную и потом в методу сервера изьять это имя? :)Ну было как-то так: Цитировать как передать при подключении к серверу некий никнейм клиента, чтобы ассоциировать дескриптор клиента с его именем??? :)Название: Re: клиент-сервер Отправлено: Fregloin от Июнь 06, 2013, 09:21 все просто, создать собственный протокол или использовать существующие.
для текстового чата можно тупо текст слать, хотя это и не совсем хорошо, можете использовать json или xml например, или собвственный бинарный,тектостовый протокол. в протоколе указать константы, которые отвечают за стадии регистрации, отправки, приема сообщения и т.п. при приеме на сервере смотреть, какое значение этой переменной и делать соответствующие действия. например как в json сделать. при onConnected() клиента слать что то типа Код: { А сервер, когда распарсит пакет json смотрит сначала на значение переменной action, смотрит что оно равно "logon", тогда извлекает nikname и присваивает нужной пременной. Как то так... советую попробовать так для начала, тем более в 5м кутэ уже есть встренный парсер json нормальный (QScript не в счёт). |