Конференция "Сети" » Авторизация через TServerSocket [D7, WinXP]
 
  • KuH (19.05.08 15:29) [0]
    Идея такова. Есть сервер, к которому конектятся клиенты. Если клиент не будет авторизирован сервером в течении некоторого периода времени, то соеденение закрывается. Информация о статусе авторизации храниться в отдельном массиве. При отключении клиента сервером, все работает нормально. Соеденение закрываеться, массив смещаеться на одну позицию.

    Проблема:
    Немогу определить номер соединения TServerSocket.Socket.Connection[i] при отключении со стороны клиента. Уважаемые мастера, подскажите как это сделать! Возможно, мой подход к авторизации вовсе неверен? Заранее спасибо.
  • Сергей М. © (19.05.08 16:23) [1]

    > Немогу определить номер соединения


    В большинстве случаев он вообще нафиг не нужен.

    Если инициатором разрыва соединения является клиент, то на стороне сервера возбуждается событие OnClientDisconnect, в обработчик которого параметром Socket передается ссылка на объект TCustomWinSocket, ассоциированный с разрываемым соединением.

    Ссылка на ЭТОТ ЖЕ объект в момент обработки этого события фигурирует в списке Connections. Это позволяет определить индекс этоой ссылки в этом списке простым циклическим перебором списка, где в каждой итерации происходит сравнение значения параметра Socket c i-м элементом списка.
  • Сергей М. © (19.05.08 16:31) [2]

    > Информация о статусе авторизации храниться в отдельном массиве


    Это лишнее.
    Можно вполне обойтись без этого массива.
  • KuH (19.05.08 16:46) [3]
    Мне этот массив нужен еще и для других целей. А за совет спасибо, сейчас попробую. Еще сразу такие вопросы:

    -Подскажите исходники програм, в которой хорошая реализация архитектуры Сервер-Клиент на базе сокетов
    -Как правильно отсеять левые пакеты?
  • Сергей М. © (19.05.08 16:57) [4]

    > Мне этот массив нужен еще и для других целей


    Для каких ?


    > исходники програм, в которой хорошая реализация архитектуры
    > Сервер-Клиент на базе сокетов


    Нет таких.
    Все зависит от конкретной прикладной задачи.
    Говорить об этом абстрактно бессмысленно.


    > Как правильно отсеять левые пакеты?


    Что еще за "левые" ?
  • KuH (19.05.08 17:34) [5]
    1) Например, информация с логином и паролем каждого соеденения храниться в нем

    2) В статьях написано в общем, а мне надо более углубленно. В чьихто исходниках я надеюсь подчерпнуть много информации, о том как правильно разрабатывать такую архитектуру, не хочу заново изобретать велосипед, у меня будет много ошибок. Конкретно меня интересует процедура логина к серверу и защита от несанкционированого взлома

    3)Левые - это те, которыми кул-хацкеры могут "положить" мой сервер, отправив большой или неправильный пакет. Я в сетевом программировании новенький, поэтому незнаю как методов взлома, так и методов защиты. Не сложно будет узнать порт и АйПи сервера и отправлять на него все, что угодно. Я так понимаю, что это самый распространенный способ вредительства
  • Сергей М. © (19.05.08 20:51) [6]

    > 1)


    Массив для этого не нужен, еще раз повторяю.

    Каждый объект класса TClientWinSocket имеет св-во Data, которое м.б. использовано для хранения любой доп.инф-ци о соединении.

    Эти объекты организованы в тот самый список Connections.

    Дальше шевели мозгами сам ... Намек был уж куда прямее ..


    > меня интересует процедура логина к серверу и защита от несанкционированого
    > взлома


    Все это не имеет отношение к транспортному уровню, который представляют эти компоненты.


    >
    > 3)Левые - это те, которыми кул-хацкеры могут "положить"
    > мой сервер, отправив большой или неправильный пакет


    Если они могут тебя "положить", значит твоя реализация прикладного протокола никуда не годится.


    > Я в сетевом программировании новенький


    Читать до полного просветления все касаемое "модель OSI" !!!
  • KuH (20.05.08 00:34) [7]
    Спасибо за советы, буду изучать!
 
Конференция "Сети" » Авторизация через TServerSocket [D7, WinXP]
Есть новые Нет новых   [134432   +19][b:0][p:0]