Главная страница
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.48 MB
Время: 0.052 c
14-1122893696
Andreyy
2005-08-01 14:54
2005.08.21
Посоветуйте книгу по D7 пожалуйста


14-1122443195
Digitman
2005-07-27 09:46
2005.08.21
Проблема FoxPro 2.x ISAM в MS Access 2003


14-1122357632
GOOD90
2005-07-26 10:00
2005.08.21
Где найти программы для Motorola c650.


9-1114885954
Игорь Л.
2005-04-30 22:32
2005.08.21
Класс в Delphi


8-1107270985
SFproG
2005-02-01 18:16
2005.08.21
программный MIDI синтезатор