@Yapparov_Ilyas

QT: Как серверу понять, какой именно сокет отсоединился?

Здравствуйте, пишу небольшое клиент- серверное приложение на Qt. Использую QTcpServer. Все соединения хранятся в QMap<int,QTcpSocket*> (дескриптор и указатель на сокет).
При отключении сокета вызывается slotDisconnected(), который должен удалить информацию о соединении из QMap:
int userId= ((QTcpSocket*)sender())->socketDescriptor();
Clients.remove(userId);

Здесь- то и поджидает ошибка. Дескриптор userId всегда равен -1, потому как сам объект сокета уже уничтожен.
В таком случае, как понять, какой именно элемент QMap удалять? Идентифицировать все через IP и номер порта?
  • Вопрос задан
  • 332 просмотра
Решения вопроса 1
Rou1997
@Rou1997
Удаляйте тот, на который указывает значение, возвращаемое sender(), вы же не копировали объект когда добавляли указатель в контейнер, а значит, это и есть тот же самый объект, не знаю насчет QMap, но обычно списки поддерживают удаление объекта без ключа или индекса, в специальный метод передаете указатель и список удаляет этот элемент.
Если с этим проблемы - то да, реализуйте собственную идентификацию.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
25 янв. 2022, в 15:08
500 руб./в час
25 янв. 2022, в 15:05
4500 руб./за проект