1

QT QTcpServer ::incomingConnection(qintptr ハンドル) 起動しない?

サーバーは基本的に機能していますが、メイン関数内で作成された場合のみです。

働く:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    TestServer server;

    return a.exec();
}

動作しません (このコードはとにかくこのようには動作しません。それは単に私が何を意味するかを示すためです):

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    classA cA;

    return a.exec();
}

classA::classA(QObject *parent) :
    QThread(parent)
{
    TestServer server;
}

メイン関数内でクラス A を作成し、AI 内で tcpserver を作成すると、サーバー自体は起動されますが、incomingConnection() 関数は実行されません。A のコンストラクターから「Server start at port ...」というメッセージが表示されるため、これを確認できます。

TestServer::TestServer(QObject *parent):
    QTcpServer(parent)
{
    if (this->listen(QHostAddress::Any, 2323)) {
        qDebug() << "Server start at port: " << this->serverPort();
    } else {
        qDebug() << "Start failure";
    }
}

つまり、メイン関数がクラス A と qtcpserver 関数を保持するようになりました。クライアントが接続すると、qtcpserver 関数は再び新しいスレッドを作成します。私がやりたいことは、スレッドによって受信されたメッセージをクラス A に保持することです。そのため、クラス A 内に qtcpserver を作成したいと考えています。

これについて誰か提案がありますか?A 内にサーバーを作成するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

2

オブジェクトサーバーをクラス classA のメンバーにする必要があります。これは、このオブジェクトが作成直後に破棄されるためです (ローカル スコープで作成するため)。

于 2016-01-24T17:19:41.270 に答える