|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
25.01.2008, 16:36 | #11 |
Пользователь
Регистрация: 25.01.2008
Сообщений: 13
|
Кстати, а что за ServerSocket И ClientSocket?
ЧТо то я не могу их найти, у меня Делфи 7. А все нашел, сорри, ступил малость. Последний раз редактировалось Redas; 25.01.2008 в 16:44. |
25.01.2008, 16:44 | #12 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Если дело происходит в локальной сети, то при начале работы клиент может просто анонсировать свое появление на broadcast адрес 255.255.255.255 через UDP - без установления соединения. В посылке он должен указать свой IP, и, например, номер порта, на котором он принимает входящие TCP и ждать ответа. Те, кто уже находятся в сети на основе этой информации смогут "вступить с ним переговоры" - как дальше Вы будете делать - связывать всех между собой двунаправленными соединениями, работать через сервер (если дело происходит в интернете, то иначе установить связь и не получится), в обоих этих случаях "исчезновение" хоста определится по прекращению TCP-коннекта, работать исключительно через броадкаст (тогда придется периодически опрашивать все известные на данный момент узлы) - Вам решать. Как хранить список текущих соединений или активных хостов - задача тривиальная, я полагаю. Экспериментируйте. (А вообще, разработку таких вещей надо начинать с протокола)
|
25.01.2008, 20:10 | #13 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Описание работы списка пользователей
Redas, я как автор этих статей, на которые дали ссылки, просто обязан пояснить как работает система создания списка пользователей более подробно.
Сначала общая картина работы: 1) Сервер запускается и находится в ожидании подключений; 2) Происходит подключение и сервер "обнуляет" массив UserMas. В массив заносятся данные наличия пользователя по номеру его канала, отметки подключения UserMas[i].Status. Регистрируется пользователь как неизвестный UserMas[i].Rec=False. 3) Сервер запрашивает имена пользователей по числу каналов. 4) Сервер принимает имена и регистрирует в массиве UserMas[i].Rec=True. Как работает список UserListView: 1) Подготовка к работе (очистка, обнуление); 2) Просматривается массив на наличие UserMas[i].Status отличных от нуля, т.е. тех, кого нужно добавить в список, и добавляются записи в лист; 3) Параллельно проверяется подленность пользователя UserMas[i].Rec , если хоть один из пользователей пока не идентифицирован, то ContList:=1 - это флаг, что лист пользователей отсылать еще рано. 4) Когда все пользователи были определены, все UserMas[i].Rec установлены в True, отсылается строка всем пользователям - она складывается из UserMas[i].Name с разделительным символом, который нельзя набрать с клавиатуры. Внимательно прочитайте комментарии в коде, все станет понятно. Если будут еще вопросы, задавайте.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
28.01.2008, 20:14 | #14 |
Познаю мир
Форумчанин Подтвердите свой е-майл
Регистрация: 05.10.2007
Сообщений: 387
|
Что могу добавить ...:
Тоже делал чят .. недоделал .... но до чего дошол : Широковещятельные рассылки не использую т.к. убедили меня что это лишний мусор в сети ... Значит так как только ктото с другово компа входит в чят то отпрравляется 1 Широковещятельный типа "Вася"входит в сеть Твой чят проверяет нету ли васиного АйПи в списке и если нет то добавляет его в список Онлайн. Если есть то соответственно не добавляет ... И при том если вася выходит из чята то тоже посылает сообщение "вася"вышел из сети При этом твой чят ищет васин АйПи в списке онлайн и удаляет оттудова ... /// Кроме этого ещё естественно есть livetime)) каждые 5 мин твой чят отправляет каждому кто есть в списке онлайн запрос "Вася"тыещё онлайн? если в течении 5 сек не пришол ответ "Да" то удаляем его из списка .... и так с каждым кто в онлайн ... это для устранения "Багов" с списком кто онлайн ... Например если ктото принудительно завершит Приложени и оно не успеет отправить "вася"вышел из сети ,то вася останется в списке 'кто онлайн но фактически его там небудет ... //// У меня всё работает , только ещё заморочки с статусами и прочими брюликами ... тут написал на быструю руку ... чтобы было хоть более менее понятно ---
|
28.01.2008, 20:57 | #15 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Разбор полетов
Собственно, для чего это делается? ...разве серверный сокет не использует OnClientDisconnect ? ...если произойдет обрыв связи с клиентом, причем с любым из подключенных, то следует задать обновление списка в OnClientDisconnect, так же и при подключении клиента OnClientConnect, зачем же делать лишние проверки!? ...нет ответа в течении времени не есть потеря связи, а реальную потерю связи вам сокет покажет.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
28.01.2008, 21:02 | #16 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
...да, и еще, почему клиентское приложение должно узнавать о присутствии прочих клиентов в чате, когда это прямая обязанность сервера ? ...сервер и должен узнавать "всё о всех" и отсылать клиентам требуемое.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
28.01.2008, 21:39 | #17 |
Познаю мир
Форумчанин Подтвердите свой е-майл
Регистрация: 05.10.2007
Сообщений: 387
|
ЗЫ:
1) Я забыл напомнить что мой чят без сервера) в чём я щитаю есть его основная прелесть))) 2) Использую только IdUDPClient/сервер для "экономии" веса приложения) ---
|
28.01.2008, 22:24 | #18 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
И прелесть и отрицательное тоже есть ) работать то будет только внутри одной сети =)
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
29.01.2008, 18:53 | #19 |
Познаю мир
Форумчанин Подтвердите свой е-майл
Регистрация: 05.10.2007
Сообщений: 387
|
А мне другово и ненадо .. чят ведь локальный ....
---
|
03.03.2008, 14:17 | #20 |
Пользователь
Регистрация: 20.11.2007
Сообщений: 16
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
фильтрация отображения из ADO... | Roof | БД в Delphi | 5 | 19.08.2008 14:38 |
Помогите сделать окно авторизации пользователей | HAMMAN | Помощь студентам | 2 | 09.05.2008 00:02 |
проблемы отображения | Karl_Karlovi4 | Общие вопросы Delphi | 12 | 31.12.2007 09:21 |
«Окно+символ». Создать класс, представляющий окно в текстовом режиме. | RustreX | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 11.11.2007 19:28 |
Работа пользователей в сети | Mike_B | Софт | 1 | 17.08.2007 16:34 |