Russian Qt Forum
Март 29, 2024, 05:07
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Работа с сетью
>
QTcpSocket свойство для авторизации.
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QTcpSocket свойство для авторизации. (Прочитано 7381 раз)
updaite
Гость
QTcpSocket свойство для авторизации.
«
:
Сентябрь 02, 2014, 21:01 »
На стороне сервера есть ссылка на сокет клиента
Код:
QTcpSocket *client
у client есть разные свойства client->?.
Хочу сделать одно из свойств идентификатором авторизации, к примеру при авторизации клиента задаем свойству клиента true если нет false.
Вопрос: Какое свойство вобрать наиболее подходящие? Что бы со стороны клиента это свойство нельзя было перевести в true, можно и числовое свойство 0 или 1. И вообще есть ли подходящие свойство для этого? Не хочу просто эти списки, перебор поиск и прочий гемр))
Записан
torwig
Самовар
Offline
Сообщений: 134
Re: QTcpSocket свойство для авторизации.
«
Ответ #1 :
Сентябрь 02, 2014, 22:22 »
Вариант с применением списка/множества/массива аутентифицированных сокетов вам не подходит, вы говорите.
Можно тогда сокет делать членом класса/структуры Client (или другое название), где будет поле bool isRegistered, которое будете устанавливать в true, если авторизация прошла успешно. Соответственно на стороне сервера будут храниться не QTcpSocket, а Client, у которого есть разные свойства и можно будет писать код:
Код:
Client* client;
.....
if (client->isRegistered) {
client->socket->write(data);
}
Или все же словарь QMap<QTcpSocket*, bool> где каждому сокету (ключу), будет установлено значение (зарегистрирован?). По умолчанию (при подключении) равно false, после авторизации меняете на true.
Я не гуру программирования, может кто еще что посоветует.
Записан
updaite
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #2 :
Сентябрь 02, 2014, 22:46 »
Спасибо, но нужно именно вот так.
Код:
QTcpSocket *client
client-> Свойство = true/false
Записан
Bepec
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #3 :
Сентябрь 02, 2014, 22:48 »
Не тормозим, делаем обёртку - класс над QTcpSocket. В котором уже указываем что надо.
Записан
updaite
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #4 :
Сентябрь 02, 2014, 22:56 »
Bepec, есть класс
Код:
class MainWindow : public QMainWindow
{
Q_OBJECT
//-------------------
};
Как сделать обертку? и как использовать?
Я в QT совсем чуть шарю))
Мне кажется это заморочка того не стоит, мне просто нужно всего одно свойство авторизован или нет, и за этого свойства не хочу программу перестраивать.
«
Последнее редактирование: Сентябрь 02, 2014, 23:07 от updaite
»
Записан
Bepec
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #5 :
Сентябрь 02, 2014, 23:13 »
Ну давайте посмотрим архитектуру.
У нас есть сервер. У нас есть куча клиентов. Сервер всё равно хранит список клиентов. Почему бы нам не сделать вместо списка клиентов список структур
Код:
struct ClientData
{
QTcpSocket * client;
bool authorize;
}
Далее работаем по стандартному, только у нас появляется свойства authorize. Если уже совсем заморочиться можно переопределить оператор доступа вроде "operator ->()" и будет то что вам надо.
Ещё вариант - QTcpSocket вроде бы наследник QObject'a с весьма интересным методом "bool QObject::setProperty(const char * name, const QVariant & value)", который позволяет установить объекту пропертю(свойство) с любым содержимым и любым значением
«
Последнее редактирование: Сентябрь 02, 2014, 23:15 от Bepec
»
Записан
updaite
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #6 :
Сентябрь 02, 2014, 23:21 »
Спасибо, но
Списки всех клиентов хранятся в QList<QTcpSocket*> m_clients;
В месте где произошёл сигнал получаю клиента от которого произошёл сигнал.
QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
client-> Работа с этим клиентом.
И m_clients много где обрабатывается например
Код:
while (!m_clients.isEmpty())
{
QTcpSocket *client = m_clients.takeFirst();
client->flush();
client->close();
client->deleteLater();
}
Мне не совсем понятно я как использовать структуру?
Это получается нужно велосипеды делать для структуры, такие как у QList.
«
Последнее редактирование: Сентябрь 02, 2014, 23:37 от updaite
»
Записан
updaite
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #7 :
Сентябрь 02, 2014, 23:56 »
Сделал так если аккаунт есть, присваиваем имя клиенту (Его логин) client->setPeerName("Name"); если нет, не чего не делаем отправляем мол клиент лузер)
Далие проверяем есть ли имя у клиента client->peerName(); если что то вернул то все ок. Для моей задачи этого вполне достаточно) Так и мониторить проще)
«
Последнее редактирование: Сентябрь 03, 2014, 00:00 от updaite
»
Записан
Bepec
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #8 :
Сентябрь 03, 2014, 00:01 »
Хорошо что у вас всё хорошо
Не понимаете и ладно.
Записан
updaite
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #9 :
Сентябрь 03, 2014, 00:04 »
Но хорошо было бы привести пример со структурой)) А то малоли чего еще приспичит содержать)
Не понимание в том как получить значение определенного массива структуры если QTcpSocket *client = qobject_cast<QTcpSocket*>(sender());
а если быть точнее значение bool authorize; при таком условии.
«
Последнее редактирование: Сентябрь 03, 2014, 00:15 от updaite
»
Записан
Gregory_E
Гость
Re: QTcpSocket свойство для авторизации.
«
Ответ #10 :
Март 03, 2018, 17:52 »
Смысл делать какую то авторизацию в простом не защищённом сокетном соединении, если любой может прочитать все байты переданные по нему.
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...