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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Алгоритм выходу из чата 
:(
    Опции темы
Sergio
Дата 25.12.2006, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Здраствуйте. Делаю локальный чат. Сейчас роботаю над списком пользователей. Алгоритм занесения в список пользователей сделал так: 
1. Каждый пользователь каждые 5 секунд посылает свои даные (ник и свой IP)
2. Сервер ловит эти даные и сверяет есть ли такой IP в своём списке. Если нет то даные пользователя заносит в массив структур и оттуда показывает список пользователей на экран. 

Тепер у меня проблема следещая: как мне сделать так , чтобы при выходе из чата какого-нибуть пользователя, он удалялся из массива структур и списка пользователей.

Зарание спасибо.

P.S. Использую UDP протокол. 
PM MAIL ICQ   Вверх
Pete
Дата 25.12.2006, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

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



А почему нельзя клиенту при завершении просто говорить: «Я закончил»?


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Sergio
Дата 26.12.2006, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Pete, Тоесть ты имееш ввиду при выходе из чата клиент посылает всем серверам о выходе?
PM MAIL ICQ   Вверх
Pete
Дата 27.12.2006, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

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



Ну, ты описал проблему очень абстрактно. Насколько я понял, ты делаешь сервак и клиент. Сервак где-то висит постоянно, а клиенты к нему подключаются/отключаются. После подключения клиент начинает общаться по протоколу. Когда отрубается -- говорит, что хочет отрубиться.

Многое зависит от того, под какую операционку ты пишешь свой чат. Если под маздай, то я вряд ли чем подскажу.

А вообще, можешь сделать как в мирке: сервак периодически посылает клиенту «PING [что-то]», клиент должен в течение определенного срока ответить «PONG [что-то]», например:
...
PING qwerty
PONG qwerty
....


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Sergio
Дата 27.12.2006, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Pete, я делаю по принципу клиент-клиент.. Розкажы по-подробнее про PING-PONG  smile 
PM MAIL ICQ   Вверх
Xenon
Дата 27.12.2006, 02:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 50



Может сервер опрашивать клиентов и если время отклика прошло, клиент удаляется. А так, по идее, клиент сам должен говорить, что он умер smile


--------------------
user posted image  
PM MAIL   Вверх
Pete
Дата 27.12.2006, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

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



Цитата(Sergio @  27.12.2006,  02:32 Найти цитируемый пост)
я делаю по принципу клиент-клиент..

Что значит «клиент-клиент»? Кто тогда будет в списке пользователей? Что будет означать, что пользователь вошел/вышел из сети? Кто тогда будет проверять, в сети ли пользователь?
Мне кажется, при такой постановке вопроса надо реализовывать именно стратегию сервер-клиент.


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Partizan
Дата 27.12.2006, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 4
Всего: 67



network assistant например никаких серверов не требует....
работает на широковещательном udp....


--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
Xenon
Дата 28.12.2006, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 11
Всего: 50



тогда не клиент-клиент, а клиент/сервер smile


--------------------
user posted image  
PM MAIL   Вверх
witex
Дата 28.12.2006, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Реально сделать! Что клиент-клиент. Но тогда и каждый клиент  как сервер будет! И тогда всё решаемо!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
MaXL
Дата 29.12.2006, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

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



Мне кажется что, как уже сказали, нужно сделать чтобы перед тем как выйти клиент посылал серверу команду что-то похоже на "exit", ну и сервер удалял из своего списка IP адрес клиент, который послал эту команду. Но вот может быть такое что допустим компьютер где запущен клиент просто выключили, а программу оставили запущенной, т.е. она не сможет как следует завершится, и тогда получится что на сервере клиент останется со статусом "подключен", вот тут есть только один выход: сервер шлёт клиенту команду, и в течении некоторого времени ждёт ответ, ответа нет, значит клиента нет, удаляем его из списка.  smile  Но т.к. по UDP может быть такое что пакет, отосланный сервером, вообще не дошел до компьютера клиента, то мне кажется что можно попробовать, чтобы сервер отсылал два раза запрос клиенту, и если ни разу не ответит, то тогда уже его реально нет  smile Так как раз вроде бы сделано в IRC.


--------------------
MaXL
PM MAIL   Вверх
Pete
Дата 29.12.2006, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 318
Регистрация: 5.1.2006
Где: Москва

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



Цитата(witex @  28.12.2006,  03:29 Найти цитируемый пост)
Но тогда и каждый клиент  как сервер будет!

А надо ли?..
Цитата(MaXL @  29.12.2006,  04:27 Найти цитируемый пост)
допустим компьютер где запущен клиент просто выключили, а программу оставили запущенной

user posted image
Фига))
Цитата(MaXL @  29.12.2006,  04:27 Найти цитируемый пост)
сервер шлёт клиенту команду, и в течении некоторого времени ждёт ответ, ответа нет, значит клиента нет, удаляем его из списка

PING-PONG (чти выше)  smile 

Да, по-моему, лучше здесь выбрать TCP. Скорость не критична.

Это сообщение отредактировал(а) Pete - 29.12.2006, 21:32


--------------------
Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу)
Не откладывай на завтра то, что можешь сделать сегодня. (Пословица)
А теперь выпишем точное значение числа пи... (Препод)
Жахни, Пендальф! © Гоблин
PM   Вверх
Rockie
Дата 29.12.2006, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

Репутация: 8
Всего: 31



Цитата(witex @  28.12.2006,  02:29 Найти цитируемый пост)
Реально сделать! Что клиент-клиент. Но тогда и каждый клиент  как сервер будет! И тогда всё решаемо!

тогда Сервер-Сервер получается smile





--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
profispb
Дата 30.12.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Самый верный вариант сделать так:
Сервер проверяет список пользователей если, в течении 5 секунд небыло получена информация от пользователя ник и IP, то удалить из массива структур и списка.
Похоже так на теории, хотя не знаю сам не пробывал и это чисто мои мысли. Попробуй мож молучится. Удачи!
--------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало!
PM MAIL ICQ   Вверх
MaXL
Дата 30.12.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
**


Профиль
Группа: Участник
Сообщений: 380
Регистрация: 24.10.2005
Где: Владивосток

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



Цитата(Pete @  29.12.2006,  21:32 Найти цитируемый пост)
Фига))

ну допустим сделали так, что пользователь удаляется из списка только в том случае, когда клиент сам послал команду выхода, а он её посылает когда пользователь выключает этот чат. Если допустим мы запускаем чат, и потом просто перезагружаем винду, то программа не завершится корректно...я это имел ввиду.


--------------------
MaXL
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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