Конференция "Сети" » Как сделать аутификацию после подключения клиента к TServerSocket [D7, WinXP]
 
  • minomorf (12.10.09 16:53) [0]
    Т.е. клиент подрубается и сразу отправляет пакет с паролем.
    Если на сервере сразу после подключения не пришел пароль или он неверен - отключить клиента.

    Как это сделать на сервере TServerSocket.
    Можно и на пальцах, а именно какие события сервера придется ловить и как сделать таймаут ожидания пакета с паролем?
  • Сергей М. © (12.10.09 16:57) [1]
    Режим какой - nonblocking или threadblocking ?
  • minomorf (12.10.09 17:02) [2]
    NonBlocking
  • Сергей М. © (12.10.09 17:18) [3]

    > какие события сервера придется ловить


    OnClientConnect и OnClientRead


    > как сделать таймаут ожидания пакета с паролем


    В обработчике OnClientConnect запускаешь таймер с заданным периодом срабатывания - он будет отсчитывать время таймаута.

    В обработчике события таймера закрываешь соединение.

    В обработчике OnClientRead принимаешь передаваемые клиентом данные, аккумулируешь их в буфере, анализируешь содержимое буфера и в случае обнаружения  в нем ожидаемого пароля останавливаешь таймер.
  • minomorf (12.10.09 18:18) [4]
    Спасибо
  • Сергей М. © (12.10.09 18:22) [5]

    > какие события сервера придется ловить


    + OnClientDisconnect + OnClientError

    Эти события тоже нужны как минимум для того чтобы остановить запущенный таймер при неожиданном дисконнекте по инициативе клиента или возникшей ошибке
  • minomorf (12.10.09 18:38) [6]
    А еще вопрос. Как передать таймеру идентификатор сокета?
  • minomorf (12.10.09 18:39) [7]
    Надо создавать массив связку Сокет-Таймер?!
  • Сергей М. © (12.10.09 18:49) [8]
    Надо, если на каждый клиенский сокет ты будешь создавать отдельный таймер.
  • Сергей М. © (12.10.09 18:51) [9]

    > передать таймеру идентификатор сокета


    У TTimer, к примеру, есть св-во Tag.

    Можно и наоборот - сослаться на созданный TTImer в свойстве Socket.Data.

    ТОлько вот вовсе необязательно плодить кучу таймеров - достаточно всего одного.
  • minomorf (12.10.09 19:17) [10]
    А на что указывает Socket.Data?
  • Сергей М. © (12.10.09 19:23) [11]
    На что захочешь, на то и укажет.
    Это пользовательское св-во.
  • minomorf (12.10.09 21:15) [12]
    Отлично, догда я пожалуй в data опишу число, типа если оно > delay то отрубаемся, если = authorize то ничего не делаем, а в таймере задаем обход всех сокетов с инкрементом data.
  • Сергей М. © (12.10.09 21:22) [13]

    > minomorf   (12.10.09 21:15) [12]


    Ну да, примерно так.
  • bananas © (09.06.10 04:20) [14]
    у меня схожая задача.
    скажите, как отключить конкретного пользователя?
    Допустим подключено 20 клиентов, их ip хранятся в БД. Нужно отключить клиента с ip одним из БД.
    Отключить именно серверсокетом, ибо на клиенте ничего писать нельзя. Я пока кроме отключения всего серверсокета (что, как я полагаю, отключит всех клиентов) ничего не нашел..
  • Slym © (09.06.10 11:04) [15]
    with ServerSocket.Socket do
    begin
     for i:=0 to ActiveConnections-1 do
       if Connections[i].RemoteAddress='127.0.0.1' then
         Connections[i].Close;
    end;

  • ArtGre (14.06.10 18:01) [16]
    Vsem zdrasti. izvenite za pocherk, drygoi klaviatyri net.
    Y menia vopros, mojno li ispolzovat TServerSocket dlia raboti v Internete.
    Esli da, v chem otlichia ot raboti v lokalke?
    spasibo
  • Сергей М. © (14.06.10 18:30) [17]

    > ArtGre   (14.06.10 18:01) [16]


    Можно.
    Ни в чем.
  • Anatoly Podgoretsky © (14.06.10 18:36) [18]
    > ArtGre  (14.06.2010 18:01:16)  [16]

    Отличий нет. Код одинаково пригоден.
  • ArtGrek (14.06.10 18:38) [19]
    R smotrel cherez IRIS obmen danix klienta k kotorimy xochy servak napisat, po IP ix servaka 5 client portov rabotaet i server posrt 80, kak mne ego(80) ispolzovat v svoem servake?
 
Конференция "Сети" » Как сделать аутификацию после подключения клиента к TServerSocket [D7, WinXP]
Есть новые Нет новых   [134437   +27][b:0][p:0.001]