Я программировал сервер, я программировал сервис и менеджера. Когда я останавливаю сервер с помощью 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.";
Фактически, эта переменная «клиенты» — это только вектор, содержащий пользовательские данные, он закрывает QTcpSocket для каждого соединения, а затем очищает переменную клиентов и сбрасывает ее в 0.
Когда у меня есть одно соединение на сервере (UI Manager работает как одно из этих соединений), и я пытаюсь остановить его, оно терпит неудачу. Я удалил эту векторную систему. И это все еще не работает, это не дает мне никакой ошибки, просто вылетает приложение.
Если вам нужен весь код, просто скажите мне!
(Извините за мой плохой английский…)
Обновление: если я удаляю «socket_server-> close ()», он работает без проблем.
Обновление № 2: Кажется, это проблема удаления указателя. ИДК ….
РЕШЕНО: Боже, я был тупым! socket_server был нулевым указателем … Я только что исправил это, и все!
Боже, я был тупым! socket_server был нулевым указателем … Я только что исправил это, и все!
Других решений пока нет …