Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как проверить имеет ли сокет соединение или нет, Что-нибудь кроме ping 
:(
    Опции темы
Artemon
Дата 26.7.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Есть клиент и сервер.
Как в любой момент времени узнать есть ли реальное соединение между клиентом и сервером? 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Romikgy
Дата 26.7.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



GetTcpTable

Добавлено @ 14:56 
или аналоги 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MoZy
Дата 29.7.2006, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 193
Регистрация: 4.6.2006

Репутация: -2
Всего: 0



А как на счет FD_CLOSE в WSAAsyncSelect 
--------------------
Experimentia est optima rerum magistra
PM MAIL WWW ICQ   Вверх
Artemon
Дата 31.7.2006, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



GetTcpTable - позволяет получить только IP и порты всех соединений - это не выход, вот еслибы он позволял получать еще и дескрипторы сокетов, тогда все былобы OK.

а на счет FD_CLOSE - сейчас гляну 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Romikgy
Дата 31.7.2006, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: нет
Всего: 146



Цитата(Artemon @  26.7.2006,  13:20 Найти цитируемый пост)
Есть клиент и сервер.Как в любой момент времени узнать есть ли реальное соединение между клиентом и сервером? 

где в этом посте
Цитата(Artemon @  31.7.2006,  10:10 Найти цитируемый пост)
вот еслибы он позволял получать еще и дескрипторы сокетов, тогда все былобы OK.

инфа о дискрипторах?
PS ось какая? 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Artemon
Дата 31.7.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Ось winXP.

с WSAAsyncSelect очень интересная вещь получается:
Я ставлю событие на FD_CLOSE и FD_WRITE, перевожу сокеты в блокирующий режим и начинаю передачу данных, по идее сообщение должно приходить только для неблокированных сокетов - НО ОНО ПРИХОДИТ.
Дальше - еще интересней:
Я отмееняю все события, но вот штука ВСЕ СОБЫТИЯ ПЕРЕСТАЮТ ПРИХОДИТЬ, но вот FD_CLOSE - все равно приходит.

Если кто-нибудь знает в чем дела - объясните?


 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Artemon
Дата 31.7.2006, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 1
Всего: 20



Вот решение:

С помощью этой функции просто получаешь IP удаленного ПК и если IP = 0.0.0.0, значит подключения нет.

Данную функцию нужно вызывать в таймере либо в отдельном потоке.

Код

  AnsiString MySocket::GetClientIP(void)const
{
  int addrLen = sizeof(sockaddr);
  struct sockaddr_in CliAddr;

  getsockname
             (
             S,
             (LPSOCKADDR)&CliAddr,
             &addrLen
             );

  AnsiString CliIP = (AnsiString)inet_ntoa(CliAddr.sin_addr);

  return CliIP;
}


Добавлено @ 22:28 
S - дескриптор сокета.
P.S.
     Функцию выдернул из своего класса.
P.S.
    Просьба к людям ведущим фак - добавьте это в фак, уж больно много людей спрашивает 


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.1652 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.