|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
12.01.2008, 23:10 | #1 |
Бот
Администратор
Регистрация: 27.05.2007
Сообщений: 182
|
обновление в блоге - Создание многопользовательского чата
Создание многопользовательского чата
pblog.ruВ предыдущей статье (“Создание клиент-сервера”) рассказывалось о разработке простейшего чата на двоих пользователей. Структура чата “head-to-head” достаточно проста, ведь есть только один канал, с одной стороны которого сервер, с другой – клиент. Multy-user-структура несколько сложнее. Есть один сервер и множество клиентов. Сервер при этом выполняет обработку входящих сообщений, пересылает их по нужным каналам, регистрирует пользователей и показывает всем, сколько пользователей общаются в текущий момент. Многопользовательский чат (Multy-user on-line) Начнем разработку приложения чата с уже готовой формы из предыдущей статьи, или с новой. Вот, что должно быть в форме:PortEdit (Edit) HostEdit (Edit) NikEdit (Edit) TextEdit (Edit) ChatMemo (Memo) ClientBtn (Button) ServerBtn (Button) SendBtn (Button) ServerSocket (ServerSocket) ClientSocket (ClientSocket) Компоненты из стандартного пакета Delphi ServerSocket и ClientSocket не всегда могут быть отображены в палитре Internet, и их нужно загрузить следующим образом: выбрать меню: Component - Install Packages… - Add., далее нужно указать файл …\bin\dclsockets70.bpl. Добавляются новые компоненты: UserListView (ListView) ImageList (ImageList) ServerTimer (Timer) (more…) |
08.04.2008, 21:29 | #2 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Добавляем приват.
F@iTH Март 28th, 2008 | 11:44
Цитата:
Сейчас набор индексов идентифиткации команд (первый байт пакета) таков: 0 - для сообщений; 1 - для идентификации пользователя; 2 - для приема списка пользователей. …вам нужно добавить еще один индекс; 3 - для приватных сообщений. После индекса в этой команде будет записано имя получателя, его можно узнать через UserListView.Selected.Caption (на OnClick), …затем идет символ конца имени Chr(152) и текст из TextEdit. Сервер приняв эту команду, определит индекс, запустит алгоритм считывания имени получателя (это тот же алгоритм, что и в процедуре считывания списка пользователей), пробежится по массиву пользователей , сравнивая полученное имя с UserMas[i].Name, если имя найдется, то должен будет остановить цикл, и отослать текст (содержимое команды после Chr(152)) по каналу i. Вот так будет выглядеть часть кода на приватные сообщения у сервера: Код:
Код:
Код:
Дальнейшее обсуждение статьи следует вести тут. Модернизация программы и комментарии могут быть полезны всем.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
15.04.2008, 11:01 | #3 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Помогите пожалуйста.Если на сервер подключается минимум 2 пользователя,то тот,кто подключился раньше,неможет посылать сообщения,вернее он их посылает,но сервер почему то их не обрабатывает.
Код:
Код:
|
15.04.2008, 15:22 | #4 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Разбор полетов...
InseR, обратите внимание на вашу запись кода цикла приема пакета, она такая (схематично):
Цикл от 0 до количество каналов - 1 начало прием пакета конец ... обработка пакета у вас почему-то вынесена за пределы этого цикла. Что происходит? В цикле приема вы используете одну переменную, в которую считываете пакеты от всех клиентов, т.е. предыдущий пакет просто затирается следующим. В результате обработчик видит только последний пришедший пакет и работает только с ним. Вам следует сделать так: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
15.04.2008, 16:16 | #5 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Блин,так и знал,что в этом дело. Спасибо вам огромное Beermonza.
|
16.04.2008, 09:50 | #6 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Возникла проблема при попытке сделать приват.
Клиент Код:
Код:
Код:
Сервер Код:
Если выбрать первого человека в списке и попытатся отправить ему приватное сообщение,то вылетит ошибка - " 0 - is not a valid integer value",а если попытаться отправить человеку стоящему ниже по списку,то вообще ничего не происходит,вернее сообщение отправляется,но до получателя оно недоходит. |
16.04.2008, 14:49 | #7 |
Новичок
Джуниор
Регистрация: 14.04.2008
Сообщений: 1
|
Beermonza, вы просто ЧЕЛОВЕЧИЩЕ)))
Чат очень помог в понимании работы отдельных компонентов Delphi, просто огромный вам респект и уважуха )) F@iTH |
16.04.2008, 15:22 | #8 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Приват...
InseR, вот тут у вас проблемы:
Код:
Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
16.04.2008, 16:38 | #9 |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Спасибо,попробую.
|
17.04.2008, 07:33 | #10 | |
Пользователь
Регистрация: 01.06.2007
Сообщений: 59
|
Цитата:
Ваш способ неработает,при компиляции выдает ошибку,да и при написании строки userList.Selected.index тоже.Я использую не ListView,а ListBox,возможно ошибка из-за этого? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обновление в блоге - Создание клиент-сервера | Pblog | Обсуждение статей | 0 | 03.10.2007 17:12 |
обновление в блоге - Диплом. Создание и продвижение сайта - готовь сани летом, а дипл | Pblog | Обсуждение статей | 0 | 31.08.2007 20:00 |
обновление в блоге - USB Холодильник | Pblog | Обсуждение статей | 0 | 25.06.2007 14:13 |
обновление в блоге - О ярлыках | Pblog | Обсуждение статей | 0 | 27.05.2007 03:17 |