Помоги с сокетами на делфе =)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by zl0y, 11 Jun 2007.

  1. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Вобщем пишу прогу она работает с сетью через сокеты,но там потребовалось защита от ддоса :) тоесть без нее можно сервер положить спрутом :( вот и я что то не могу придумать как ограничить количество подключений с 1 ипа :confused: помогите плиз!
     
  2. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    То есть на делфне пишется серверная часть? Сокеты реализуются через компонент или на winsock?
     
  3. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Не делфе пишуться оби проги. Обе используют TClient
     
  4. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    В общем, я думаю, что нужно создать массив записей вида:
    Code:
    record
      ip: string;
      timeout: integer;
    end;
    И при подключении клиента проверять: если его IP не содержится в массиве, то разрешить подключение, его IP занести в массив, в timeout внести текущее время. Если ip содержится в массиве, то отнимаем от текущего времени значение timeout, если оно больше определенного значения, разрешаем подключение и обновляем данные, иначе запрещаем. Это в обобщенном виде, на практике может оказаться немного сложней.
     
  5. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    Тогда вопрос как отключить клиента ? типа если Socket.ActiveConnections > 100 then ????
    Socket.Close не помогает :(
     
  6. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    ServerSocket1.Socket.Connections[id].Close;

    Где id - порядковый номер клиента. Блин, не люблю я эти компоненты сетевые, неудобные они.
     
  7. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Вот это рульная штука. WinSock 2 вообще рулит ;)
     
  8. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Хочешь не хочешь , ты ВСЕГДА юзаешь winsock2 , только подключаешь заголовочные файлы второй или первой версии.
     
    3 people like this.
  9. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    > вот и я что то не могу придумать как ограничить количество подключений с 1 ипа помогите плиз!

    возможно будет логичным предположтиь что стоит дисконектить клиента, если он уже подключен? сравнить его айпи с теми что уже подключены?
    я незнаю как там у вас все в делфи с тысячей дибильных компонентов где подключение - это визаульная часть формы приложения, но я бы лично в потоке сервера записывал бы айпи и не создавал бы потом обслуж. клиента если айпи уже есть, скажем в массиве
     
    1 person likes this.