1

私はサーバーをプログラミングし、サービスとマネージャーをプログラミングしました。UI Server Manager でサーバーを停止すると、サーバーは「stopServer()」という関数を呼び出します。この関数には次のものが含まれます。

qDebug() << "Stopping the server...";
// Clear the vector and free the memory by deleting pointers
qDebug() << clients.size();
for(int i=0;i<clients.size();i++){
    clients.get(i)->getSocket()->flush();
    clients.get(i)->getSocket()->close();
    clients.get(i)->getSocket()->disconnectFromHost();
    clients.get(i)->getSocket()->waitForDisconnected(3);
}
clients.destroy();
// Close the server
socket_server->close();
// Stop the handler
qDebug() << "Stopped.";

実際には、その「clients」変数はユーザーデータを含む単なるベクトルであり、接続ごとに QTcpSocket を閉じてから、clients 変数を消去して 0 にリセットします。

サーバー上に 1 つの接続があり (UI Manager はその接続の 1 つとして機能します)、それを停止しようとすると失敗します。そのベクトルシステムを削除しました。それでも動作しません。エラーは発生しません。アプリケーションがクラッシュするだけです。

すべてのコードが必要な場合は、教えてください。

(下手な英語ですみません…)

更新:「socket_server->close()」を削除すると、問題なく動作します。更新 #2: ポインターの削除に問題があるようです。なるほど……。

解決済み:ああ、私はばかだった! socket_server は null ポインターでした...私はそれを修正しました。

4

1 に答える 1

0

ああ、私はばかだった!socket_server は null ポインターでした...私はそれを修正しました。

于 2012-11-08T01:19:20.067 に答える