Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.08.21;
Скачать: CL | DM;

Вниз

ServerSocket.Socket.Connections[] ...   Найти похожие ветки 

 
artemon   (2005-04-07 09:13) [0]

Люди подскажите пожалуйста:

В обработчие TServerSocket.onClientRead

procedure Tmain_form.PServerClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 
 ...

end;


нужно определить какой номер Pserver.Socket.Connections[?] в данный момент задействован, т.е. к моему серверу может подключаться несколько клиентов даже с одним и тем же ip и мне надо знать какой запрос на каком коннекте сервера находится ...


 
Digitman ©   (2005-04-07 09:26) [1]


> нужно определить какой номер Pserver.Socket.Connections[?]
> в данный момент задействован


зачем он тебе нужен ? тебе тут же ответить этому клиенту нужно ?
ну и отвечай ему ! незачем для этого знать индекс данного соединения в списке Connections ..

2-й параметр процедуры обработки события OnClientRead - это TServerClientWinSocket, используй его send-методы для отправки инф-ции именно тому клиенту, событие чтения данных от которого в наст.момент тобой обрабатывается


 
artemon   (2005-04-07 09:56) [2]

мне надо не сразу отправлять ответ! Принятые данные записываются во временное хранилищи и ожидают своей очереди обработки. Потом они обрабатываются, формируется ответ и посылается клиенту, номер коонекта которого закреплен за данным запросом.
т.е. принцип работы такой: принимает, ставим в очередь, обрабатываем, отсылаем ...
 Делать привязку по ip не покатит, т.к. с одного IP может подключаться большое количество клиентов. (больше одного)!


 
Digitman ©   (2005-04-07 10:09) [3]


> Делать привязку по ip не покатит


а делать привязку по индексу в списке тем более неразумно и неправильно, потому что список Connections может поменять свое содержимое в любой момент времени, и клиент, распознанный тобой в дан.момент под таким-то номером в этом списке, вовсе не обязан иметь тот же номер в списке в последующие моменты времени

а вот адрес экз-ра объекта TServerClientWinSocket (того самого, передаваемого тебе в событии чтения 2-м параметром) будет уникален и неизменен .. его и фиксируй в структуре эл-та твоей очереди обработки .. обратившись впоследствии по этому адресу ты пошлешь рез-т обработки именно тому самому клиенту .. если же в момент отправки рез-та обработки обращение к объекту вызвало исключение, это значит что клиент уже неактивен или произошла иная транспортная ошибка для данного соединения


 
artemon   (2005-04-07 10:18) [4]

спасибо! пошел разбираться


 
Dmitri_ru   (2005-04-16 12:33) [5]

Сделать привязку по Ip + port. И все. У каждого Connections[] есть уникальный номер порта, даже если IP у всех одиноковый.


 
Eraser ©   (2005-04-16 14:54) [6]

Dmitri_ru

Не верное утверждение. Уникальность соединения обеспечивает не 1 IP и 1 Port, а 2 IP и 2 Port"a.


 
Dmitri_ru   (2005-05-11 06:46) [7]

Почему 2IP и 2Port"а?
1 ip/port - это ip/port клиента

мне кажется этого достаточно - ведь на одной машине физически не могут находиться 2 клиента на одном порте!!!!

а второй какой?



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

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

Наверх




Память: 0.46 MB
Время: 0.028 c
4-1120035773
DarkSet
2005-06-29 13:02
2005.08.21
открытие файла приложением


4-1120376910
SpyBoy
2005-07-03 11:48
2005.08.21
Менеджер процессов


1-1123000525
deamon_t
2005-08-02 20:35
2005.08.21
Вызов функции


14-1122477615
maximsm
2005-07-27 19:20
2005.08.21
MSVS


3-1121061495
wild_arg
2005-07-11 09:58
2005.08.21
Имена параметров





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский