Russian Qt Forum
Ноябрь 23, 2024, 15:09 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отследить, какй QTcpSocket закрылся?  (Прочитано 6794 раз)
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« : Март 24, 2013, 16:30 »

QTcpServer создает по мере подключения массив наследников QTcpSocket. Как отслеживать завершившие работу подключения, что бы на их место размещать новые?
Записан

Как мало времени и как много нужно узнать
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Март 24, 2013, 23:44 »

отлавливайте сигналы)

сигналы:
void   connected ()
void   disconnected ()
« Последнее редактирование: Март 24, 2013, 23:46 от gil9red » Записан

Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #2 : Март 25, 2013, 09:02 »

если соединить disconnected() QTcpSocket cо слотом QTcpServer, то как передать НОМЕР именно этого сокета? Сигнал disconnected() не передает параметров слоту Непонимающий
Записан

Как мало времени и как много нужно узнать
RedDog
Гость
« Ответ #3 : Март 25, 2013, 09:04 »

Хранить массив подконнекченных сокетов (в мапе - ключ- указатель на сокет, значение - номер или адрес) а в слоте по sendr()-у из мапы доставать.
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #4 : Март 25, 2013, 09:15 »

спасибо, понял, то что надо
Записан

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #5 : Март 25, 2013, 09:35 »

Код:
connect( myClient[j], SIGNAL( disconnected()), this, SLOT(clientDisconnect()));

что то не понял, как мне в clientDisconnect() определить указатель на отправитель сигнала, если нет передаваемого параметра?
Записан

Как мало времени и как много нужно узнать
RedDog
Гость
« Ответ #6 : Март 25, 2013, 09:44 »

ну sender() же (выше писалось), выдает указатель на QObject и через qobject_cast привести его к QTcpSocket*
хотя последнее возможно и лишнее
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #7 : Март 25, 2013, 09:49 »

Код:
void loadServer::clientDisconnect()
{

}

как там sender определить? Ну не понимаю Непонимающий
Записан

Как мало времени и как много нужно узнать
RedDog
Гость
« Ответ #8 : Март 25, 2013, 09:52 »

Код:
void loadServer::clientDisconnect()
{
    QTcpSocket *senderSocket = qobject_cast<QTcpSocket *>(sener());
}
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #9 : Март 25, 2013, 09:58 »

спасибо, не знал Строит глазки
Записан

Как мало времени и как много нужно узнать
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #10 : Март 25, 2013, 12:30 »

Код:
void loadServer::clientDisconnect()
{
serverClient *senderSocket = qobject_cast<serverClient *>(sender());
for (int i=0;i<maxClient;i++) // удаляем подключения
if (myClient[i]==senderSocket)
{
delete myClient[i];
myClient[i]=0;
break;
}
}

Идентифицирует правильно, но после удаления подключения валится на

Код:
void QHostAddressPrivate::clear()
{
    a = 0;
    protocol = QAbstractSocket::UnknownNetworkLayerProtocol;
    isParsed = true;
    memset(&a6, 0, sizeof(a6));
}

Чего я не учитываю?
Записан

Как мало времени и как много нужно узнать
RedDog
Гость
« Ответ #11 : Март 25, 2013, 12:33 »

Код:
myClient[i]->deleteLater();
Записан
Примерный ученик
Бывалый
*****
Offline Offline

Сообщений: 450


И это не всегда помогает


Просмотр профиля
« Ответ #12 : Март 25, 2013, 12:52 »

спасибо, помогло Строит глазки
Записан

Как мало времени и как много нужно узнать
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.141 секунд. Запросов: 22.