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 に答える