-
Идея такова. Есть сервер, к которому конектятся клиенты. Если клиент не будет авторизирован сервером в течении некоторого периода времени, то соеденение закрывается. Информация о статусе авторизации храниться в отдельном массиве. При отключении клиента сервером, все работает нормально. Соеденение закрываеться, массив смещаеться на одну позицию.
Проблема: Немогу определить номер соединения TServerSocket.Socket.Connection[i] при отключении со стороны клиента. Уважаемые мастера, подскажите как это сделать! Возможно, мой подход к авторизации вовсе неверен? Заранее спасибо.
-
> Немогу определить номер соединения
В большинстве случаев он вообще нафиг не нужен.
Если инициатором разрыва соединения является клиент, то на стороне сервера возбуждается событие OnClientDisconnect, в обработчик которого параметром Socket передается ссылка на объект TCustomWinSocket, ассоциированный с разрываемым соединением.
Ссылка на ЭТОТ ЖЕ объект в момент обработки этого события фигурирует в списке Connections. Это позволяет определить индекс этоой ссылки в этом списке простым циклическим перебором списка, где в каждой итерации происходит сравнение значения параметра Socket c i-м элементом списка.
-
> Информация о статусе авторизации храниться в отдельном массиве
Это лишнее. Можно вполне обойтись без этого массива.
-
Мне этот массив нужен еще и для других целей. А за совет спасибо, сейчас попробую. Еще сразу такие вопросы:
-Подскажите исходники програм, в которой хорошая реализация архитектуры Сервер-Клиент на базе сокетов -Как правильно отсеять левые пакеты?
-
> Мне этот массив нужен еще и для других целей
Для каких ?
> исходники програм, в которой хорошая реализация архитектуры > Сервер-Клиент на базе сокетов
Нет таких. Все зависит от конкретной прикладной задачи. Говорить об этом абстрактно бессмысленно.
> Как правильно отсеять левые пакеты?
Что еще за "левые" ?
-
1) Например, информация с логином и паролем каждого соеденения храниться в нем
2) В статьях написано в общем, а мне надо более углубленно. В чьихто исходниках я надеюсь подчерпнуть много информации, о том как правильно разрабатывать такую архитектуру, не хочу заново изобретать велосипед, у меня будет много ошибок. Конкретно меня интересует процедура логина к серверу и защита от несанкционированого взлома
3)Левые - это те, которыми кул-хацкеры могут "положить" мой сервер, отправив большой или неправильный пакет. Я в сетевом программировании новенький, поэтому незнаю как методов взлома, так и методов защиты. Не сложно будет узнать порт и АйПи сервера и отправлять на него все, что угодно. Я так понимаю, что это самый распространенный способ вредительства
-
> 1)
Массив для этого не нужен, еще раз повторяю.
Каждый объект класса TClientWinSocket имеет св-во Data, которое м.б. использовано для хранения любой доп.инф-ци о соединении.
Эти объекты организованы в тот самый список Connections.
Дальше шевели мозгами сам ... Намек был уж куда прямее ..
> меня интересует процедура логина к серверу и защита от несанкционированого > взлома
Все это не имеет отношение к транспортному уровню, который представляют эти компоненты.
> > 3)Левые - это те, которыми кул-хацкеры могут "положить" > мой сервер, отправив большой или неправильный пакет
Если они могут тебя "положить", значит твоя реализация прикладного протокола никуда не годится.
> Я в сетевом программировании новенький
Читать до полного просветления все касаемое "модель OSI" !!!
-
Спасибо за советы, буду изучать!
|