1

我正在将“本地财富服务器”示例(来自 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;
}
4

2 回答 2

3

如果您希望您的服务器通知您的客户,我认为您应该创建并发送自己的消息,例如:

QString fortune = "Server down";

但这会在您的服务器有传入消息时发生。
或者您可以使用QTcpServer::close()方法关闭服务器

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

您的客户端应用程序将失去连接,您应该能够通过以下方式获得所需的信号:

connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
             this, SLOT(displayError(QAbstractSocket::SocketError)));
于 2011-08-30T15:33:31.317 回答
1

你不能发出QLocalSocket::ServerNotFoundError,因为它不是一个信号。您应该定义自己的信号并发出它(您可以在信号中传递值)。您还应该实现插槽并将信号连接到它。阅读更多关于信号和槽的信息。

于 2011-08-30T12:17:18.380 回答