Russian Qt Forum

Qt => Работа с сетью => Тема начата: ilyagoo от Октябрь 21, 2008, 09:09



Название: отключение от QTcpServer
Отправлено: ilyagoo от Октябрь 21, 2008, 09:09
Сервер на одном компе, клиенты на другом. Как отследить отключение клиентов от сервера с помощью QTcpServer без использования таймера (по таймеру можно было бы отслеживать количество подключений)? Клиенты - QTcpSocket.


Название: Re: отключение от QTcpServer
Отправлено: Rcus от Октябрь 21, 2008, 09:46
http://doc.trolltech.com/4.4/qabstractsocket.html#disconnected
Цитировать
void QAbstractSocket::disconnected ()   [signal]

This signal is emitted when the socket has been disconnected.


Название: Re: отключение от QTcpServer
Отправлено: IMPOMEZIA от Октябрь 21, 2008, 15:11
Можно долго ждать:
void QAbstractSocket::disconnected ()
если клиент отключился каким-нибуть неправильным способом, например методом выдёргивания сетевого кабеля или переходом в ждущий режим.


Название: Re: отключение от QTcpServer
Отправлено: ilyagoo от Октябрь 21, 2008, 15:13
Цитировать
This signal is emitted when the socket has been disconnected.
Сокет-то понятно как узнает об отключении сервера, а вот как узнает об этом сервер???


Название: Re: отключение от QTcpServer
Отправлено: Rcus от Октябрь 21, 2008, 15:50
QTcpServer разделяет соединения через
Цитировать
QTcpSocket * QTcpServer::nextPendingConnection ()   [virtual]
Returns the next pending connection as a connected QTcpSocket object.
действительно, сам он не узнает :)


Название: Re: отключение от QTcpServer
Отправлено: Admin от Октябрь 21, 2008, 17:55
в веб серверах
1) если клиент не прислал данные в течении timeout, удаляем клиента
2) keep-alive - клиент посылает каждый минуту маленький пакетик


Название: Re: отключение от QTcpServer
Отправлено: ilyagoo от Октябрь 22, 2008, 12:06
Кстати, еще один вопрос.
В примерах к Qt есть некий chat. Это приблизительно то, что мне нужно, но...
Я запускаю его на разных машинах и вижу следующий результат:
в линухе он видит себя и остальные запущенные экземпляры под любой осью, в виндах он видит себя и все линуксовые экземпляры, но не видит ни одного из запущенных на машинах под виндами. винды в домене, перевод в рабочую группу не помогает. брандмауэр отключен. что не так?