Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.12.02;
Скачать: [xml.tar.bz2];

Вниз

Номер коннекта в сокетах   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.038 c
15-1194093107
Булат Шакиров
2007-11-03 15:31
2007.12.02
Бушков А.А. как историк ;)


3-1184448285
Anar
2007-07-15 01:24
2007.12.02
Как прокручивать записи в DBGrid скроллером мышки?


2-1194335656
lobach
2007-11-06 10:54
2007.12.02
Explorer.exe - как его завершить???


15-1192888838
TwentyThird
2007-10-20 18:00
2007.12.02
Как не скучать по "совку"? Поделить на 100 и радоваться!


2-1194514597
Квэнди
2007-11-08 12:36
2007.12.02
Странное отображение форм





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский