Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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`у


 
Sergl   (2007-11-06 15:29) [41]

А что Вы тогда имели введу про безопасность?


 
Sergl   (2007-11-06 15:29) [42]

Я имел ввиду подмену трафика...


 
Сергей М. ©   (2007-11-06 15:38) [43]


> Я имел ввиду подмену трафика


Кому он нафих нужен, твой траффик ?) Объясни ..


 
Sergl   (2007-11-06 15:40) [44]

По факту: А что Вы тогда имели введу про безопасность?


 
Sergl   (2007-11-06 15:42) [45]


> Кому он нафих нужен, твой траффик ?) Объясни ..

Тому кто захочет фальсифицировать результаты теста клиента с другим идом.

По факту: А что Вы тогда имели введу про безопасность?


 
Сергей М. ©   (2007-11-06 15:44) [46]


> Тому кто захочет фальсифицировать результаты теста клиента
> с другим идом.


Просто шифруй свой траффик, тогда желающих заметно поубавится.. Если они вообще найдутся, в чем я сильно сомневаюсь)


 
Sergl   (2007-11-06 15:48) [47]

Ну а всетаки: что Вы тогда имели введу про безопасность?


 
Сергей М. ©   (2007-11-06 15:51) [48]

Несанкц. доступ к контексту сессии я имел ввиду.


 
Sergl   (2007-11-06 15:57) [49]

Ясно. Спасибо за советы.



Страницы: 1 2 вся ветка

Текущий архив: 2007.12.02;
Скачать: CL | DM;

Наверх




Память: 0.58 MB
Время: 0.03 c
2-1194595850
pathfinder
2007-11-09 11:10
2007.12.02
EExternalException..


15-1193684400
Evanescence
2007-10-29 22:00
2007.12.02
Redhat 9 на VirtualPC


3-1184674956
Циркуль
2007-07-17 16:22
2007.12.02
BDE, TTable, TQuery, TBatchMove, ошибка "Table is full"


3-1184590706
Zabludshiy
2007-07-16 16:58
2007.12.02
FireBird BLOB


4-1179507014
Bacardi
2007-05-18 20:50
2007.12.02
Очередь печати