Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Обсуждение статей
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.05.2008, 18:16   #31
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от DeCoder
Есть 1 маленькая просьба)... Пожалюйста, напишите об освных коммандах компонентов Server&Client Socket. Или дайте линк на подобную книгу/документацию. Я просто программированием сетей в Делфи раньше вообще почти не занимая(только в лок. сети и то для БД). подвопрос: Как сделать запрос на сервер с клиента на загрузку какого-либо файла?(например, новостей чата).
Основные команды можно изучить в статье, комментарии по крайней мере мне кажется этому способствуют. И потом всегда можно спросить, что именно интересует )
Есть подборка исходников на обширные темы тут: http://www.delphisources.ru/pages/faq/all_articles.html ...смотрите раздел "Сокеты".

Цитата:
Сообщение от DeCoder
Если не трудно, напишите пример, как можно переименовать клиента(если ник с матом или нет в нем логики (например, "ппН6гн7к")). Желательно в программном виде.
Цитата:
Сообщение от DeCoder
Как принудительно переименовать кого-либо?
Цитата:
Сообщение от Beermonza Посмотреть сообщение
По этическим соображениям сервер не имеет на это никаких прав. Если это нужно по причине нецензурного имени или пр. , то это нужно отсекать еще на стадии регистрации пользователя.
А если конструктивно, то вам нужно ввести новый тип команды, которую клиентское приложение понимает как: "изменить имя пользователя", ...стало быть, свое имя поменяется на предложенное серверов, а сервер одновременно, с такой командой для конкретного пользователя, подготовит новый список пользователей (с новым именем) и отправит остальным участникам.
Извините, нет времени модернизировать специально для кого-то ), ...это дело лично ваше.
Ничего сложного, ...введите новый тип команды, например:
индекс - 9 означает "сменить имя клиента"
было "Алщст40в" , нажимаем на список, узнаем канал, заменяем имя на "Нелогичный", отсылаем по каналу команду "9Нелогичный", ...клиент принимает, определяет, что ключ 9 - это смена имени, находит себя в своем списке и заменяет на Copy({пакет},2,Length({пакет})-1), меняет NikEdit.Text на то же.

Цитата:
Сообщение от DeCoder
Блин... не знаю, что-то я туплю...
Никак не могу реализовать бан...
В списке должен быть применен оператор выделения:
i:=IntToStr(UserListView.Selected.Index);
ServerSocket.Socket.Connections[i].Close;


Цитата:
Сообщение от DeCoder
Как считаете, как наилучшим образом реализовать анти-мат? создать файл с базой матов и послe
"n" матов в чате от какого-либо
юзера давать предупреждение, позле "х" "пинать", а после "у" банить на "z" минут?
ИМХО, задача для Великого и Могучего Русского Языка почти не выполнимая. Изобретательность в нецензурной лексике на столько велика, что под час даже цензурные выражения с изменением некоторых букв или иное сочетание несет именно тот смысл, который заложил в него автор, но система не в состоянии определить этого.
Проще заложить весь литературный Русский )))) , но тогда потеряется "чатовский слэнг" ...или можно, без ущерба для общения, посадить человечка, он уж точно будет определять нецензурную лексику.

Ну, а если конструктивно, Вы верно мыслите, ...делаем цикл от 1 до длинны сообщения, внутри еще один цикл от текущей позиции до длинны сообщения - текущая позиция , копирование участка ...и, соответственно, проверка в БД (файл или что-то иное). Тут есть недостаток, ...цензурные слова тоже могут быть определены как нецензурные по сочетанию букв, а таких много.

Цитата:
Сообщение от DeCoder
З.Ы.2. И всё-таки, как узнать ip того, кто отправил сообщение.
ClientIP:=ServerSocket.Socket.Conne ction[i].RemoteAddress;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 27.05.2008, 18:06   #32
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию PopupMenu для списка пользователей

Цитата:
Сообщение от SoundMan, Май 26th, 2008 | 21:00
... что надо сделать чтобы PopupMenu в TListView вызывалось только над ником ?
Вот такой метод я применяю, ...он не совсем отсекает меню, т.е. если выделение пункта было, а клик был в пустое поле списка, то меню выйдет.
Ну и после выполнения пункта меню, нужно чистить текущие выделения.

Код:
procedure TForm1.UserListViewMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
// если нажата правая клавиша мыши
// и список пользователей не пустой
// и есть выделеная запись,
// то подключаем PopupMenu1
  If (Button=mbRight)
      And (UserListView.Items.Count>0)
      And (UserListView.SelCount>0) then UserListView.PopupMenu:=PopupMenu1;
end;
Имя пункта меню "Item1"

Код:
procedure TForm1.Item1Click(Sender: TObject);
begin
// убираем фокус с записи
  UserListView.Selected.Focused:=False;
// убираем выделение
  UserListView.Selected.Selected:=False;
// отключаем PopupMenu
  UserListView.PopupMenu:=nil;
end;
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 29.05.2008, 16:55   #33
SoundMan
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 27
По умолчанию

Небольшой вопросик - Как посчитать сколько раз было отправлено сообщение от клиента за определённое время??
SoundMan вне форума Ответить с цитированием
Старый 29.05.2008, 19:29   #34
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

При отправке сообщения с клиента пропишите счетчик t:=t+1; или Inc(t);
Ставьте еще один таймер, указывайте интервал, внутри вывод в Edit или Label значения t, с последующим обнулением t:=0;
Может это нужно знать на сервере? ...тогда на прием клиентского сообщения со стороны сервера.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 29.05.2008 в 19:31.
Beermonza вне форума Ответить с цитированием
Старый 29.05.2008, 19:31   #35
SoundMan
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 27
По умолчанию

Большое спасибо!

Цитата:
Может это нужно знать на сервере?
Эммм...Вообще даже и незнаю))
Я хочу сделать следующее: Если клиент начинает флудить (отправлять сообщения очень быстро) то он блокируется на определённое время.

Последний раз редактировалось SoundMan; 29.05.2008 в 21:14.
SoundMan вне форума Ответить с цитированием
Старый 29.05.2008, 23:22   #36
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от SoundMan Посмотреть сообщение
... Я хочу сделать следующее: Если клиент начинает флудить (отправлять сообщения очень быстро) то он блокируется на определённое время.
Тогда нужен массив, каждая ячейка соответствует номеру пользователя (его каналу), содержимое - счетчику для конкретного канала. Процедура таймера в цикле перебирает весь массив по числу пользователей, и обрабатывает превышения счетчиков в виде блокировки канала или пропуска прослушивания каналов с обязательным обнулением каждого счетчика.
При приеме сообщений сервером по номеру канала массив счетчиков обновляется.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 30.05.2008, 16:41   #37
SoundMan
Пользователь
 
Регистрация: 25.05.2008
Сообщений: 27
По умолчанию

Ухххх, это сложнее чем я думал, сам бы до такого не додумался ни за что) Ладно попробую разобраться, спасибо!
SoundMan вне форума Ответить с цитированием
Старый 24.06.2008, 11:46   #38
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

Всем привет, я тут тоже попытался сделать чат... Но у меня такая проблема: в ServerSocket1 ввожу порт "8080" и в ClientSocket1 тоже самое... Сервер создал а друзья входят клиентом, они пишут в чат и видят только свои сообщения, а у меня (сервера) при попытке отправить сообщение вылезает такая ошибка: List index out of bounds (0). Не пойму в чем проблема? может объясните в чем дело? Заранее спасибо.
Патрон вне форума Ответить с цитированием
Старый 24.06.2008, 12:12   #39
N!ckeL
Форумчанин
 
Регистрация: 29.03.2008
Сообщений: 300
По умолчанию

код отправки можно увидеть?
Карп преодолевший водопад становится драконом.
N!ckeL вне форума Ответить с цитированием
Старый 24.06.2008, 12:52   #40
Патрон
Форумчанин
 
Аватар для Патрон
 
Регистрация: 07.03.2008
Сообщений: 151
По умолчанию

Вот:
Код:
ServerSocket1.Socket.Connections[0].SendText(edit2.Text);
memo1.Lines.Add(Edit3.Text+': '+Edit2.Text);
edit2.Text:='';
Патрон вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
обновление в блоге - Создание клиент-сервера 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