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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 11:31   #131
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Очень просто. Объясню с самого начала. Вот клиент подключился. Процедура в таймере (procedure TForm1.ServerTimerTimer(Sender: TObject); ) работает всегда, даже если не пришло ни одного пакета, ...за наличие пакета отвечает вот этот код:
Код:
text:=ServerSocket.Socket.Connections[i-1].ReceiveText();
// условие, что пакет не пуст
If text<>'' then
  Begin
Так вот, ...перед тем как это условие будет проверять наличие пакета, нужно организовать цикл перебора списка забаненых клиентов, в котором в качестве аргумента числится IP-адрес, это BanMas: array[0..255] of String. Например так:
Код:
For n:=0 to 255 do
  Begin
    If BanMas[n] = ServerSocket.Socket.Connections[i-1].RemoteAddress then
      ServerSocket.Socket.Connections[i-1].Close;
  end;
Не забываем, что для удобства цикл перебора каналов от 1 до ServerSocket.Socket.ActiveConnectio ns, поэтому фактический номер канала i-1. Т.к. цикл проверяет все текущие каналы, то при каждой смене i, заново просмотрится и массив BanMas.
Этот случай просто выкидывает забаненых клиентов.

Второй вариант менее эффективен. Он позволяет клиенту подключиться к чату, видеть что пишут его участники, но не позволяет ничего отправлять и изменять. Т.е. после определения пользователя сервер шлет управляющий пакет, который заблокирует все элементы управления, преимущественно кнопки, ...но и функции сокета если нужно. Для этого создается новая команда, как? ...читаем исходную статью и добавляем функционал для ее работы.
Не совсем понял этот момент
Код:
For n:=0 to 255 do
тут происходит сравнение, если да то как-то странно не понятно.
Цитата:
Код:
text:=ServerSocket.Socket.Connections[i-1].ReceiveText();
// условие, что пакет не пуст
If text<>'' then
  Begin
Так вот, ...перед тем как это условие будет проверять наличие пакета, нужно организовать цикл перебора списка забаненых клиентов
Так
Код:
// цикл по существующим каналам
      For i:=1 to ServerSocket.Socket.ActiveConnections do
        Begin

For n:=0 to 255 do
  Begin
    If BanMas[n] = ServerSocket.Socket.Connections[i-1].RemoteAddress then
      ServerSocket.Socket.Connections[i-1].Close;
  end;

// сохраним пакет (если ничего не прислали, по пакет пустой)
          text:=ServerSocket.Socket.Connections[i-1].ReceiveText();
// условие, что пакет не пуст
          If text<>'' then
            Begin
Shouldercannon вне форума Ответить с цитированием
Старый 10.05.2009, 22:48   #132
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Если код написан, значит материал теории понят )
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 11.05.2009, 13:43   #133
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Есть ещё одна проблема. Делаю систему оповещения о спамерах. Есть два предупреждения на третий же бан (блокировка управляющих частей чата). Проблема в следующем, после того как юзер забанен мне надо отослать на сервер IP флудильщика.
Что нужно сделать, чтобы IP дошёл до сервера?
P.S. Естественно для этого нужно будет создать новую команду, у меня она будет 5.
Shouldercannon вне форума Ответить с цитированием
Старый 11.05.2009, 16:31   #134
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
Есть ещё одна проблема. Делаю систему оповещения о спамерах. Есть два предупреждения на третий же бан (блокировка управляющих частей чата). Проблема в следующем, после того как юзер забанен мне надо отослать на сервер IP флудильщика.
Что нужно сделать, чтобы IP дошёл до сервера?
P.S. Естественно для этого нужно будет создать новую команду, у меня она будет 5.
IP любого клиента вы узнаете автоматически из команды RemoteAddress серверного сокета. Пока канал "жив" адрес вы всегда сможете получить, и ни в коем случае не нужно определять его на стороне клиента и отсылать на сервер. Дважды спам проходит, на третий раз нужно перед закрытием канала записать IP в массив бана.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 11.05.2009, 17:14   #135
mnbvcxz11
Пользователь
 
Аватар для mnbvcxz11
 
Регистрация: 07.05.2009
Сообщений: 36
По умолчанию

Вопрос по теме как сделать так чтобы сервер не принемал на стороене сервера одинаковый Ник от клиента
mnbvcxz11 вне форума Ответить с цитированием
Старый 11.05.2009, 21:40   #136
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от mnbvcxz11 Посмотреть сообщение
Вопрос по теме как сделать так чтобы сервер не принемал на стороене сервера одинаковый Ник от клиента
Выполните регистрацию как положено, с паролями. Для этого нужно создать тип команды в которой передается ник и пароль, через знак разделения. После приема сервером пакета регистрации, клиент входит, если ник совпадает или пароль неверный, то посылать ответный пакет под тем же ключом команды и так, пока не будут выполнены все условия. Ну вы сами все понимаете. Сложного ничего нет, начните, я помогу.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 12.05.2009, 14:41   #137
mnbvcxz11
Пользователь
 
Аватар для mnbvcxz11
 
Регистрация: 07.05.2009
Сообщений: 36
По умолчанию Вопрос про бан

Вопрос про бан почему при переподключении клиента код этот не работает хотя Ip Этот же
For n:=0 to 255 do
Begin
If BanMas[n] = ServerSocket.Socket.Connections[i-1].RemoteAddress then
ServerSocket.Socket.Connections[i-1].Close;
end;

Вот я вывел в memo1 ip адреса

procedure TForm1.Button2Click(Sender: TObject);
begin
with ServerSocket.Socket do
begin
for i:=0 to activeConnections-1 do
memo1.lines.add(Connections[i].RemoteAddress+':'+IntToStr(Connect ions[i].RemotePort));
end; // with
mnbvcxz11 вне форума Ответить с цитированием
Старый 12.05.2009, 16:14   #138
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,899
По умолчанию

Цитата:
Сообщение от mnbvcxz11 Посмотреть сообщение
Вопрос про бан почему при переподключении клиента код этот не работает хотя Ip Этот же
For n:=0 to 255 do
Begin
If BanMas[n] = ServerSocket.Socket.Connections[i-1].RemoteAddress then
ServerSocket.Socket.Connections[i-1].Close;
end;

Вот я вывел в memo1 ip адреса

procedure TForm1.Button2Click(Sender: TObject);
begin
with ServerSocket.Socket do
begin
for i:=0 to activeConnections-1 do
memo1.lines.add(Connections[i].RemoteAddress+':'+IntToStr(Connect ions[i].RemotePort));
end; // with
Вы забаненый IP в массив вбили?
Shouldercannon вне форума Ответить с цитированием
Старый 12.05.2009, 17:20   #139
mnbvcxz11
Пользователь
 
Аватар для mnbvcxz11
 
Регистрация: 07.05.2009
Сообщений: 36
По умолчанию Тема бан

Вот этой кнопкой удаляю клиента
procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnectio ns-1].RemoteAddress;
ServerSocket.Socket.Connections[ServerSocket.Socket.ActiveConnectio ns-1].Close;
UpdDo:= True;
end;

Вот этой кнопкой занашу в мемо1
procedure TForm1.Button2Click(Sender: TObject);
begin
with ServerSocket.Socket do
begin
for i:=0 to activeConnections-1 do
memo1.lines.add(Connections[i].RemoteAddress+':'+IntToStr(Connect ions[i].RemotePort));
end; //

Как дальше запретить этим клиентам т.е. как сделать чтобы на стороне сервера проверялось(или Мемо или Массив записей удаленных)
mnbvcxz11 вне форума Ответить с цитированием
Старый 12.05.2009, 17:51   #140
mnbvcxz11
Пользователь
 
Аватар для mnbvcxz11
 
Регистрация: 07.05.2009
Сообщений: 36
По умолчанию Тема бан

Ответ на вопрос Вы забаненый IP в массив вбили?

В смысле вбили
For n:=0 to 255 do
Begin
If BanMas[n] = ServerSocket.Socket.Connections[i-1].RemoteAddress then
ServerSocket.Socket.Connections[i-1].Close;
end;

Я так понял массив BanMas[n] должен автоматом брать удаленные, но он их не берет(удаленных клиентов) Не работает

Или я не так понял вопрос
mnbvcxz11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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