Текущий архив: 2007.12.02;
Скачать: CL | DM;
Вниз
Номер коннекта в сокетах Найти похожие ветки
← →
Sergl (2007-11-06 13:06) [0]При присоединении клиента к серверу происходит событие clientconnect, при этом событии нужно отправить клиенту сообщение sendtext.
Вопрос: как узнать номер соединения данного клиента?
т.е. serversocket1.socket.connection[???].sendtext("text");
← →
Сергей М. © (2007-11-06 13:10) [1]
> как узнать номер соединения данного клиента?
Он, этот "номер", тебе нафих не нужен.
В обработчик события тебе передан параметр Socket, вот его Send-метод и вызывай.
← →
Sergl (2007-11-06 13:14) [2]Он ненужен если сервер не решает САМ какому клиенту что-то отправить, а если клиентов много(абстрактные имена, например, содержатся в массиве) и сервер должен отправить сообщение одному имени.Как тогда быть?
← →
Сергей М. © (2007-11-06 13:16) [3]
> Как тогда быть?
Для начала определиться, какая характеристика клиента будет однозначно идентифицировать его на стороне сервера.
← →
Sergl (2007-11-06 13:17) [4]Ну скажем ID в БД.
← →
Sergl (2007-11-06 13:19) [5]Ну скажем ID в БД.
← →
Сергей М. © (2007-11-06 13:19) [6]Храни этот ID в св-ве Data соответствующего кл.соединения (см. TCustomWinSocket.Data)
← →
Sergl (2007-11-06 13:38) [7]Т.е. при коннекте я записываю socket.data=ID;
Там тип pointer, как записать в этот мой id туда?
← →
Джо © (2007-11-06 13:41) [8]> [7] Sergl (06.11.07 13:38)
> Там тип pointer, как записать в этот мой id туда?
Socket.Data := Pointer(Id)
← →
Сергей М. © (2007-11-06 13:41) [9]
> как записать в этот мой id туда?
>
Смотря какого типа твой id
← →
Sergl (2007-11-06 13:46) [10]Тип integer.
Затем когда мне нужно что-то отослать клиенту я и перебираю все коннекты, нахожу нужный Socket.Data и ему передаю... Так?
← →
Сергей М. © (2007-11-06 13:49) [11]
> Тип integer
см. [8]
> перебираю все коннекты, нахожу нужный Socket.Data и ему
> передаю... Так?
Если список не сортирован - да, без тривиального перебора не обойтись.
← →
Sergl (2007-11-06 13:52) [12]Ok.
Это свойство DATA хранится на на стороне сервера для каждого соединения? Т.е. при отключении клиента и его повторного соединения мне нужно в какой-то переменной на клиенте хранить этот ID что бы его передать при повторном соединении(например sendtext`ом) для, как-бы, продления сессии клиентом?
← →
Сергей М. © (2007-11-06 13:58) [13]
> то свойство DATA хранится на на стороне сервера для каждого
> соединения?
Да.
> при отключении клиента и его повторного соединения мне нужно
> в какой-то переменной на клиенте хранить этот ID что бы
> его передать при повторном соединении(например sendtext`ом)
> для, как-бы, продления сессии клиентом?
Да, можно и так, если проблемы безопасности тебя не волнуют.
← →
Sergl (2007-11-06 14:00) [14]
> на клиенте хранить этот ID
Естественно передав его ссервера(например sendtext`ом)
← →
Sergl (2007-11-06 14:01) [15]
> проблемы безопасности тебя не волнуют.
Может и волнуют) А как это должно выглядеть с точки зрения безопасности?
← →
Sergl (2007-11-06 14:05) [16]Логика у меня такая: если клиент при соединении передает дай id то я его даю, если говорит у меня свой есть то согласно его id`у я и продлеваю ему сессию.
← →
Сергей М. © (2007-11-06 14:08) [17]
> как это должно выглядеть с точки зрения безопасности?
>
Сначала поясни, для чего тебе "сессии" и почему бы всякий раз при коннекте не спросить у сервера актуальный ID интересующего клиента
← →
Sergl (2007-11-06 14:10) [18]Пишу сетевой тест. Может сервер вырубится и чтобы при востановлении работы сервера клиенты могли продолжить работу...
← →
Сергей М. © (2007-11-06 14:11) [19]
> Sergl
Обрати внимание, что современный аськин протокол подразумевает хранение UIN"ов твоего контактного листа именно на стороне сервера. Всякий раз когда ты коннектишься к аськиному серверу, твой клиент запрашивает этот контакт-лист у сервера.
← →
Sergl (2007-11-06 14:12) [20]Если трафик изменить при входе на клиент и передать id какой-то свой тогда при отключении и повторном соединении клиент попросит "не тот" id и сервер ему даст сессию.:) Выход вижу в хеш`е id`а?
← →
Сергей М. © (2007-11-06 14:21) [21]Ты чего сотворяешь-то ? Чат что ли ?)
← →
Sergl (2007-11-06 14:26) [22]Сетевой тест)
Ну если клиенту передавать хеш id`а тогда вероятность подмена сессии будет => к нулю...
← →
Сергей М. © (2007-11-06 14:29) [23]Интересно, как твой сервер собирается восстанавливать данные прерванных клиентских сессий после своего неожиданного падения ?
← →
Sergl (2007-11-06 14:32) [24]Согласно иду и переданной информации от клиента(типа это начал, это закончил и т.п.; все в БД) до разрыва сессии.
← →
Сергей М. © (2007-11-06 14:36) [25]
> Согласно иду и переданной информации от клиента
Твой сервер, надо понимать, будет хранить инф-цию обо всех прерванных по его вине сессиях ?
А если клиент устал ждать пока сервер "поднимется" и ушел насовсем ?
А если таких клиентов куча ?
← →
Sergl (2007-11-06 14:41) [26]Если разговор о бесполезной инфе в БД, то можно совершать чистку в бд "всех старых, неокочивших тест клиентов".
← →
Sergl (2007-11-06 14:43) [27]
> совершать чистку в бд
Либо автоматически регулярную либо в ручную...
← →
Сергей М. © (2007-11-06 14:47) [28]
> можно совершать чистку в бд "всех старых, неокочивших тест
> клиентов".
>
А по какому критерию будет осуществляться эта "чистка" ?
Как отличить клиента, который отлучился ненадолго, от клиента, который больше никогда не вернется ?
← →
Sergl (2007-11-06 14:51) [29]Хранится инфа о времени начала тестирования и о времени завершения. Если времени завершения нету и начало было "давно", то мы эту запись трем.
← →
Сергей М. © (2007-11-06 14:52) [30]Бедный-бедный тестируемый клиент)
← →
Sergl (2007-11-06 14:53) [31]Естевственно это отличие условное...Можно поставить минуту а можно восемь часов...
← →
Sergl (2007-11-06 14:54) [32]Ну так по факту: хеш это выход? Или что-то можно придумать еще?
← →
Сергей М. © (2007-11-06 14:59) [33]
> хеш это выход? Или что-то можно придумать еще?
Откуда в БД берутся эти ID ?
← →
Sergl (2007-11-06 15:03) [34]Например уникальный id(autoincrement) + какаято своя "бяка" и хэш от всего этого?
← →
Сергей М. © (2007-11-06 15:06) [35]
> Например уникальный id(autoincrement) + какаято своя "бяка"
И что все это означает логически ?
← →
Sergl (2007-11-06 15:13) [36]Для каждой новой записи в бд генерируется(autoincrement) id(целочисленное чило) но пользователю мы передаем не хэш этого чила а хэш например хэш(inttostr(id)+"бяка"). "Бяка" одна и таже для любого id`а. Бяка нужна потомучто, если хацкер узнает что md5 то обработав трафик он может взять хэш от, допустим, от предидущего id и тогда толку от хэш`а нету.
← →
Сергей М. © (2007-11-06 15:23) [37]
> Для каждой новой записи в бд
В БД нет записей.
Записи есть в таблице.
БД в частном случае может состоять из одной таблицы. Это твой случай ? В таком случае приведи ее структуру: типы полей и их назначение.
← →
Sergl (2007-11-06 15:26) [38]Ну да я имел ввиду таблицу. А нафиг поля то ее. Я сказал про поле id, больше для хэша ничего не нужно.
← →
Сергей М. © (2007-11-06 15:27) [39]Зачем хэш-то ? Кому твой id кроме тебя нужен ?)
← →
Sergl (2007-11-06 15:28) [40]
> Это твой случай ?
Нет конечно но это я думаю не имеет значения ес идентифицировать по одной таблице и т.е. id`у
Страницы: 1 2 вся ветка
Текущий архив: 2007.12.02;
Скачать: CL | DM;
Память: 0.53 MB
Время: 0.04 c