私はサーバーをプログラミングし、サービスとマネージャーをプログラミングしました。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 ポインターでした...私はそれを修正しました。