Russian Qt Forum
Сентябрь 28, 2024, 06:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpServer::incomingConnection запретить соединение при условии...  (Прочитано 3164 раз)
RedDog
Гость
« : Май 26, 2011, 09:41 »

Необходимо дать клиенту отказ в соединении при определенных условиях.
т.е. есть сервер, который на входящее соединение создает отдельный поток, в котором в свою очередь создается сокет:

Код:
void NetworkServer::incomingConnection(int handle)
{
    SocketWorkThread *thread = new SocketWorkThread(this, handle);
    thread->start();
}

void SocketWorkThread::run()
{
    w_socket = new workSocket(this, m_socketDescriptor);
    exec();
}

При определенном условии (к примеру IP клиента в бан-лист попал), надо что бы у клиента код:
Код:
QTcpSocket * client_socket;
....
bool SomeClienClass::connectToServer()
{
    client_socket = new QTcpSocket(0);
    client_socket->connectToHost(hostName, port);
    return client_socket->waitForConnected();
}

возврящал false
Записан
BRE
Гость
« Ответ #1 : Май 26, 2011, 10:21 »

надо что бы у клиента код:
...
возврящал false
Вовсе это не надо.
Происходит подключение (!), сервер проверяет клиента на пригодность и если он ее не прошел, сервер разрывает соединение. Т.е. подключение будет происходить все равно (функция будет возвращать true, если сервер доступен), а вот что делать дальше - дело сервера.

Записан
RedDog
Гость
« Ответ #2 : Май 26, 2011, 11:11 »

Решил чуток проще...
В первом посте немного наврал, т.к. через SSL работаю, в результате задача свелась к тому, что при определенных параметрах, не давать клиенту SSL авторизацию, т.е.:
Код:
workSocket::workSocket(QObject *parent, int _socketDescriptor) :
    QObject(parent)
{
    ssl_socket = new QSslSocket(this);
    ssl_socket->setSocketDescriptor(_socketDescriptor);
........
    if (<мое условие соблюдается>)
ssl_socket->startServerEncryption();
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 21.