Вопрос:
Я использую пример “Local fortune server” (из Qt 4.7.3) как службу в Windows. Я хочу, чтобы, когда кто-то приостановил обслуживание, локальный сервер должен уведомить об ошибке подключенному локальному сокету (локальному клиенту удачи). Ошибка может быть QLocalSocket :: ServerNotFoundError. Теперь, как создать эту ошибку из примера сервера. Посмотрите на следующий код, где я хочу сгенерировать эту ошибку.
void FortuneServer::incomingConnection(quintptr socketDescriptor) { if (disabled) { **// here i want to emit QLocalSocket::ServerNotFoundError** return; } QString fortune = fortunes.at(qrand() % fortunes.size()); FortuneThread *thread = new FortuneThread(socketDescriptor, fortune, this); connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); thread->start(); } void FortuneServer:: pause() { disabled = true; } Лучший ответ:
Если вы хотите, чтобы ваш сервер уведомлял ваших клиентов, я думаю, вы должны создать и отправить свое собственное сообщение, например:
QString fortune = «Server down»;
Но это произойдет, когда ваш сервер получит входящее сообщение.
или вы можете отключить сервер с помощью метода QTcpServer :: close()
void FortuneServer:: pause() { this.close(); }
ваше клиентское приложение потеряет соединение, и вы сможете получить сигнал, который вы хотите в нем:
connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(displayError(QAbstractSocket::SocketError))); Ответ №1
Вы не можете испускать QLocalSocket::ServerNotFoundError, потому что это не сигнал. Вы должны определить свой собственный сигнал и испустить его (вы можете передавать значения в сигналах). Вы также должны использовать слот и подключить к нему сигнал. Подробнее о сигналах и слотах.