![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Здраствуйте. Делаю локальный чат. Сейчас роботаю над списком пользователей. Алгоритм занесения в список пользователей сделал так:
1. Каждый пользователь каждые 5 секунд посылает свои даные (ник и свой IP) 2. Сервер ловит эти даные и сверяет есть ли такой IP в своём списке. Если нет то даные пользователя заносит в массив структур и оттуда показывает список пользователей на экран. Тепер у меня проблема следещая: как мне сделать так , чтобы при выходе из чата какого-нибуть пользователя, он удалялся из массива структур и списка пользователей. Зарание спасибо. P.S. Использую UDP протокол. |
|||
|
||||
| Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
А почему нельзя клиенту при завершении просто говорить: «Я закончил»?
-------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Pete, Тоесть ты имееш ввиду при выходе из чата клиент посылает всем серверам о выходе?
|
|||
|
||||
| Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Ну, ты описал проблему очень абстрактно. Насколько я понял, ты делаешь сервак и клиент. Сервак где-то висит постоянно, а клиенты к нему подключаются/отключаются. После подключения клиент начинает общаться по протоколу. Когда отрубается -- говорит, что хочет отрубиться.
Многое зависит от того, под какую операционку ты пишешь свой чат. Если под маздай, то я вряд ли чем подскажу. А вообще, можешь сделать как в мирке: сервак периодически посылает клиенту «PING [что-то]», клиент должен в течение определенного срока ответить «PONG [что-то]», например: ... PING qwerty PONG qwerty .... -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
| Sergio |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 843 Регистрация: 28.7.2006 Где: Solar System-> Earth Репутация: 0 Всего: 1 |
Pete, я делаю по принципу клиент-клиент.. Розкажы по-подробнее про PING-PONG
|
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
Может сервер опрашивать клиентов и если время отклика прошло, клиент удаляется. А так, по идее, клиент сам должен говорить, что он умер
|
|||
|
||||
| Pete |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
Что значит «клиент-клиент»? Кто тогда будет в списке пользователей? Что будет означать, что пользователь вошел/вышел из сети? Кто тогда будет проверять, в сети ли пользователь? Мне кажется, при такой постановке вопроса надо реализовывать именно стратегию сервер-клиент. -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
|||
|
||||
| Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 4 Всего: 67 |
network assistant например никаких серверов не требует....
работает на широковещательном udp.... -------------------- СУВ, Partizan. |
|||
|
||||
| Xenon |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1529 Регистрация: 12.4.2006 Репутация: 11 Всего: 50 |
тогда не клиент-клиент, а клиент/сервер
|
|||
|
||||
| witex |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 224 Регистрация: 16.10.2006 Где: Эстония Репутация: 0 Всего: 4 |
Реально сделать! Что клиент-клиент. Но тогда и каждый клиент как сервер будет! И тогда всё решаемо!
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. |
|||
|
||||
| MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
Мне кажется что, как уже сказали, нужно сделать чтобы перед тем как выйти клиент посылал серверу команду что-то похоже на "exit", ну и сервер удалял из своего списка IP адрес клиент, который послал эту команду. Но вот может быть такое что допустим компьютер где запущен клиент просто выключили, а программу оставили запущенной, т.е. она не сможет как следует завершится, и тогда получится что на сервере клиент останется со статусом "подключен", вот тут есть только один выход: сервер шлёт клиенту команду, и в течении некоторого времени ждёт ответ, ответа нет, значит клиента нет, удаляем его из списка.
-------------------- MaXL |
|||
|
||||
| Pete |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 318 Регистрация: 5.1.2006 Где: Москва Репутация: нет Всего: 12 |
А надо ли?..
Фига))
PING-PONG (чти выше) Да, по-моему, лучше здесь выбрать TCP. Скорость не критична. Это сообщение отредактировал(а) Pete - 29.12.2006, 21:32 -------------------- Совет учиться на ошибках других бесполезен; научиться чему-либо можно только на собственных ошибках. (Бернард Шоу) Не откладывай на завтра то, что можешь сделать сегодня. (Пословица) А теперь выпишем точное значение числа пи... (Препод) Жахни, Пендальф! © Гоблин |
||||
|
|||||
| Rockie |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 8 Всего: 31 |
тогда Сервер-Сервер получается -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
|||
|
||||
| profispb |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 27.12.2005 Где: Санкт - Петербург Репутация: 1 Всего: 1 |
Самый верный вариант сделать так:
Сервер проверяет список пользователей если, в течении 5 секунд небыло получена информация от пользователя ник и IP, то удалить из массива структур и списка. Похоже так на теории, хотя не знаю сам не пробывал и это чисто мои мысли. Попробуй мож молучится. Удачи! --------------------
В жизни, я люблю делать, то что я люблю. А не то что модно, престижно и выгодноЛюблю когда начинает работать, то что без меня не работало! |
|||
|
||||
| MaXL |
|
|||
![]() Developer ![]() ![]() Профиль Группа: Участник Сообщений: 380 Регистрация: 24.10.2005 Где: Владивосток Репутация: нет Всего: 2 |
ну допустим сделали так, что пользователь удаляется из списка только в том случае, когда клиент сам послал команду выхода, а он её посылает когда пользователь выключает этот чат. Если допустим мы запускаем чат, и потом просто перезагружаем винду, то программа не завершится корректно...я это имел ввиду. -------------------- MaXL |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |