Как выдать ошибку для QLocalSocket - PullRequest
1 голос
/ 30 августа 2011

Я реализую пример '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;
}

Ответы [ 2 ]

3 голосов
/ 30 августа 2011

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

QString fortune = "Server down";

Но это произойдет, когда на ваш сервер поступит сообщение.
или вы можете отключить сервер с помощью метода QTcpServer :: close ()

void FortuneServer:: pause()
{
    this.close();
}

ваше клиентское приложение потеряет соединение, и вы сможете получить сигнал, который выхочу в нем с этим:

connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
             this, SLOT(displayError(QAbstractSocket::SocketError)));
1 голос
/ 30 августа 2011

Вы не можете излучать QLocalSocket::ServerNotFoundError, потому что это не сигнал. Вы должны определить свой собственный сигнал и излучать его вместо этого (вы можете передавать значения в сигналах). Вы также должны реализовать слот и подключить к нему сигнал. Подробнее о сигналах и слотах .

...