![]() |
|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#361 |
Новичок
Джуниор
Регистрация: 11.05.2010
Сообщений: 2
|
![]()
Вы не могли бы помочь с организацией передачи файлов к определенному пользователю ! буду очень благодарен !
|
![]() |
![]() |
![]() |
#362 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Помочь создать код, нет, ...описать принцип и структуру, да.
В чате передается пакет символов через команду SendText. Файл - это поток данных типа Stream. Т.е. нужно подумать о том, как сервер будет понимать запрос клиента на передачу файла. Это будет некая команда, очередная, например 6. Клиент должен слать на сервер пакет с заголовком 6, в котором есть все данные о том, кому отправляется файл, как называется файл, какую длину он имеет. Сервер получив такой (еще текстовый) пакет, должен передать все данные адресату и приготовиться принимать файл. Если клиент отсылает поток как SendStream, то сервер принимает его через ReceiveBuf, хранит у себя целиком или сразу отсылает через SendStream адресату как говорится "на лету", при этом подсчитывая размер приходящих пакетов и считая сколько осталось до полной передачи файла, по данным которые ранее прислал клиент. Как только сервер определит, что весь объем данных передан, он отключит режим приема данных, для конкретного пользователя, т.е. будет принимать снова текстовые пакеты ReceiveText. Адресат, так же, получив пакет о том, что некто передает ему файл по команде 6, переходит в режим приема данных ReceiveBuf. Он записывает пакеты в единственный поток типа TMemoryStream, и продолжает это до тех пор, пока не подсчитает, что длина потока соответствует пришедшей ранее длине файла. Далее поток сохраняется на диск с именем как конкретный файл, а приложение переходит снова в режим чата. Или это можно выполнить параллельно, только по команде 6 принимаются данные, по остальным, в зависимости от предназначения. Вот так файл загружается в поток и отсылается: Код:
Принять поток можно так: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#363 |
Новичок
Джуниор
Регистрация: 11.05.2010
Сообщений: 2
|
![]()
Спасибо огромное! буду разбираться!!
![]() |
![]() |
![]() |
![]() |
#364 |
Регистрация: 18.05.2010
Сообщений: 7
|
![]()
Господа Кодеры у меня проблема я делаю этот чат мне надо сделать вот так
делаю бегущую строку Код:
Код:
![]() это я делаю типа рекламы я закрыл кнопку сделать сервер и все сидят у меня помогите что бы если я меняю все бы видели текст который я написал ![]() Последний раз редактировалось Beermonza; 19.05.2010 в 00:03. |
![]() |
![]() |
![]() |
#365 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Если вы хотите посылать рекламу в режиме сервера, то настройка строки появляется только в режиме сервера (кнопка создание сервера), через свойства Visible.
На сервере заведите очередной номер для команды, научите клиентов реагировать на команду под таким кодом, пусть принятый пакет записывают в Label и запускают таймер. Посмотрите посты выше, там учили клиентов понимать приватные сообщения.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
#366 |
Регистрация: 18.05.2010
Сообщений: 7
|
![]()
Спасибо попробую сделать так как вы сказали
![]() |
![]() |
![]() |
![]() |
#367 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,897
|
![]()
Никак не разберусь с чего начать делать эту систему игнора. Помогите пожалуйста.
|
![]() |
![]() |
![]() |
#368 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]() Цитата:
Игнор - система фильтрации у клиента, индивидуально. Сервер как слал сообщения так и шлет, клиент просто смотрит свой список и не отображает сообщения, если ник игнорируемого совпадает с записанным в некотором списке (системный файл). Бан - система принудительного закрывания канала отмеченного пользователя, серверная. При коннекте сервер обычно запрашивает по поду "1" ник пользователя, пользователь присылает его, ...если ник находится в списке бана, то канал автоматически закрывается, не давая пользователю войти в чат. Кроме ника в списке бана числятся и IP-адреса, для того чтобы отслеживать несанкционированные входы под другими никами. Начните с создания файла, в который будут построчно записываться IP-адрес и ник пользователя. Привяжите заполнение файла к списку UserListView, на выделение пункта и нажатие кнопки "Отправить в бан". Caption выделения ищется в массиве по записи UserMas[i].Name, если оно найдено, берется IP-адрес: ServerSocket.Socket.Connections[i-1].RemoteAddress. Это все в файл бана, сам канал закрывается: ServerSocket.Socket.Connections[i-1].Close , идет обновление UpdMas := True. Это выкидывание и запоминание пользователя. Теперь идем в процедуру ServerTimerTimer. Пункт кейса 1 (код приема ника клиента). Вставляем цикл поиска присланного пользователем ника в файле бана. Если такой ник найден, и кроме того IP-адрес совпадает, то закрываем канал, обновляем. Вообще, на усмотрение что главнее, ник или IP. Если ник не найден, но найден IP, впустить пользователя выполнив авторизацию и подсчитав пользователя: UserMas[i].Rec := True и Inc(Autores), или счесть его одним и тем же, но с разным ником, тогда аналогично первому действию (выпнуть), ...на усмотрение. Если нет совпадений ни по нику ни по IP, пропускать всегда.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
![]() |
![]() |
![]() |
#369 |
Участник клуба Подтвердите свой е-майл
Регистрация: 26.01.2008
Сообщений: 1,897
|
![]()
Игнор забаненого. Банятся юзеры по IP. Допустим я забанил кого-то при этом он находится в чате, но с заблокированными элементами управления. Далее этот юзер выходит из чата и снова заходит и тут сервер обработав бан начинает раз 50-70 в секунд отсылать команду бана тем самым дося себя. И юзер начинает досится, но у него через каждую секунду идёт обработка команды бана. Даже если а бан массиве ничего нет и зашёл хоть один юзер тоже начинается дос, отсылаю команду бана так сказать в пустоту.
Код:
Последний раз редактировалось Shouldercannon; 20.05.2010 в 08:26. |
![]() |
![]() |
![]() |
#370 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
![]()
Что у вас числится под запросом "4"? ...что спрашивает сервер у клиента? ...это команда на блок?
Из показанной вами вырезки кода не понятно куда помещен код проверки, он в Case 1 процедуры ServerTimerTimer? Если да, то он войди в бесконечный цикл не может, поскольку выполняется при определенных условиях, т.е. когда пользователь назовет свой ник, и далее проверка на бан выполняться уже не будет.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
обновление в блоге - Создание клиент-сервера | 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 |