Russian Qt Forum

Qt => Работа с сетью => Тема начата: RedDog от Май 26, 2011, 09:41



Название: QTcpServer::incomingConnection запретить соединение при условии...
Отправлено: 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


Название: Re: QTcpServer::incomingConnection запретить соединение при условии...
Отправлено: BRE от Май 26, 2011, 10:21
надо что бы у клиента код:
...
возврящал false
Вовсе это не надо.
Происходит подключение (!), сервер проверяет клиента на пригодность и если он ее не прошел, сервер разрывает соединение. Т.е. подключение будет происходить все равно (функция будет возвращать true, если сервер доступен), а вот что делать дальше - дело сервера.



Название: Re: QTcpServer::incomingConnection запретить соединение при условии...
Отправлено: RedDog от Май 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();
}