C++ (Qt) if (!mClients[i].isNull()) { // Слот - "Отключение клиента" disconnect(mClients[i], SIGNAL(disconnected()), this, SLOT(slotRejectClient())); // Слот - "Получение новых данных" disconnect(mClients[i], SIGNAL(readyRead()), this, SLOT(slotReceiveData())); // Слот - "Ошибка сокета" disconnect(mClients[i], SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotClientSocketError(QAbstractSocket::SocketError))); mClients[i]->close(); mClients[i]->deleteLater(); mClients[i] = 0;
C++ (Qt)// Подключение клиента к серверному сокетуint Server::slotAcceptClient(){ // Превышение максимального количества активных клиентов if (mActiveClients == mMaxClients) { QPointer<QTcpSocket> client = QPointer<QTcpSocket>(mServer->nextPendingConnection()); client->write(createCommandPackage(CommandType::ConnectionLimit)); emit signalSendTextToLog(QString("Перегрузка сервера! Подключение клиента с адреса <b>%1</b> отклонено!") .arg(client->peerAddress().toString())); client->close(); client->deleteLater(); return 0; } bool result = false; int clientNumber = 0; // Поиск свободного места в массиве для сохранения информации о клиенте for (int i = 0; i < mMaxClients; i++) { if (!mClients[i].isNull()) continue; clientNumber = i; result = true; break; } if (!result) return -1; mClients[clientNumber] = QPointer<QTcpSocket>(mServer->nextPendingConnection()); // Слот - "Отключение клиента" connect(mClients[clientNumber], SIGNAL(disconnected()), this, SLOT(slotRejectClient())); // Слот - "Получение новых данных" connect(mClients[clientNumber], SIGNAL(readyRead()), this, SLOT(slotReceiveData())); // Слот - "Ошибка сокета" connect(mClients[clientNumber], SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotClientSocketError(QAbstractSocket::SocketError))); mActiveClients++; emit signalSendTextToLog(QString("Подключен клиент №%1 (<b>%2</b>)") .arg(clientNumber) .arg(mClients[clientNumber]->peerAddress().toString())); // Инициализирующие данные if (!mClients[clientNumber].isNull()) mClients[clientNumber]->write(createCommandPackage(CommandType::IsReady)); return 0;}
C++ (Qt) mClients[clientNumber] = QPointer<QTcpSocket>(mServer->nextPendingConnection()); // Слот - "Отключение клиента" connect(mClients[clientNumber], SIGNAL(disconnected()), this, SLOT(slotRejectClient()));
C++ (Qt)void QTcpServer::incomingConnection(int socketDescriptor)