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

Вниз

Обновление списка клиентов ClientSocket   Найти похожие ветки 

 
NetMan2   (2004-03-17 13:01) [0]

У меня программы с помощью компонентов ClientSocket и ServerSocket обмениваются информацией по сети. Есть список активных клиентов, то есть подключённых в данный момент. Как мне сделать чтобы он автоматически обновлялся, при подключении или отключении коиента. Обрабатываю событие OnClientConnect, всё нормально, а на OnClientDisconnect не реагирует. Приходится в ручную обновлять.


 
NetMan2   (2004-03-17 13:01) [0]

У меня программы с помощью компонентов ClientSocket и ServerSocket обмениваются информацией по сети. Есть список активных клиентов, то есть подключённых в данный момент. Как мне сделать чтобы он автоматически обновлялся, при подключении или отключении коиента. Обрабатываю событие OnClientConnect, всё нормально, а на OnClientDisconnect не реагирует. Приходится в ручную обновлять.


 
FireMan_Alexey ©   (2004-03-17 13:06) [1]

В событии OnClientError добавь Socket.Disconnect(Socket.SocketHandle);
Error:=0;


 
FireMan_Alexey ©   (2004-03-17 13:06) [1]

В событии OnClientError добавь Socket.Disconnect(Socket.SocketHandle);
Error:=0;


 
FireMan_Alexey ©   (2004-03-17 13:07) [2]

Хотел тебе напомнить, что КОД показывать желательно!!!


 
FireMan_Alexey ©   (2004-03-17 13:07) [2]

Хотел тебе напомнить, что КОД показывать желательно!!!


 
Digitman ©   (2004-03-17 13:34) [3]


> а на OnClientDisconnect не реагирует


потому что отключившийся клиент (т.е. тот кто явился причиной возбуждения данного события) в момент обработки события (вплоть до возврата из обработчика) все еще фигурирует в списке ActiveConnections (он будет исключен из упомянутого списка СРАЗУ же после завершения тобой обработки события) .. так устроен TServerSocket .. и правильно он устроен, потому что смысл события OnClientDisconnect - указать тебе на клиента, который только что отключился, чтобы ты отреагировал на это событие нужным тебе образом

вариантов привести твой собственный виз.список активных коннектов в соответствие со внутренним списком ActiveConnections всего два : синхронный и асинхронный

к примеру, пусть список активных коннектов у тебя отображается средствами ListView

рассмотрим, например, синхронный вариант

В событии OnClientConnect ты добавляешь новый TListItem к своему списку и ассоциируешь его с ДАННЫМ клиентом

li := ListView.Items.Add;
//Socket - это 2-й параметр метода-обработчика события
li.Data := Socket; //прямая ссылка  
Socket.Data := li; //реверсивная ссылка

В событии OnClientDisconnect ты удаляешь TListItem, ассоциированный с ДАННЫМ клиентом, из своего списка

//Socket - это 2-й параметр метода-обработчика события

или
TListItem(Socket.Data).Delete; //поиск по прямой ссылке

или
ListView.FindData(0, Socket, True, False).Delete; //поиск по реверсивной ссылке


 
Digitman ©   (2004-03-17 13:34) [3]


> а на OnClientDisconnect не реагирует


потому что отключившийся клиент (т.е. тот кто явился причиной возбуждения данного события) в момент обработки события (вплоть до возврата из обработчика) все еще фигурирует в списке ActiveConnections (он будет исключен из упомянутого списка СРАЗУ же после завершения тобой обработки события) .. так устроен TServerSocket .. и правильно он устроен, потому что смысл события OnClientDisconnect - указать тебе на клиента, который только что отключился, чтобы ты отреагировал на это событие нужным тебе образом

вариантов привести твой собственный виз.список активных коннектов в соответствие со внутренним списком ActiveConnections всего два : синхронный и асинхронный

к примеру, пусть список активных коннектов у тебя отображается средствами ListView

рассмотрим, например, синхронный вариант

В событии OnClientConnect ты добавляешь новый TListItem к своему списку и ассоциируешь его с ДАННЫМ клиентом

li := ListView.Items.Add;
//Socket - это 2-й параметр метода-обработчика события
li.Data := Socket; //прямая ссылка  
Socket.Data := li; //реверсивная ссылка

В событии OnClientDisconnect ты удаляешь TListItem, ассоциированный с ДАННЫМ клиентом, из своего списка

//Socket - это 2-й параметр метода-обработчика события

или
TListItem(Socket.Data).Delete; //поиск по прямой ссылке

или
ListView.FindData(0, Socket, True, False).Delete; //поиск по реверсивной ссылке


 
Digitman ©   (2004-03-17 13:34) [4]


> а на OnClientDisconnect не реагирует


потому что отключившийся клиент (т.е. тот кто явился причиной возбуждения данного события) в момент обработки события (вплоть до возврата из обработчика) все еще фигурирует в списке ActiveConnections (он будет исключен из упомянутого списка СРАЗУ же после завершения тобой обработки события) .. так устроен TServerSocket .. и правильно он устроен, потому что смысл события OnClientDisconnect - указать тебе на клиента, который только что отключился, чтобы ты отреагировал на это событие нужным тебе образом

вариантов привести твой собственный виз.список активных коннектов в соответствие со внутренним списком ActiveConnections всего два : синхронный и асинхронный

к примеру, пусть список активных коннектов у тебя отображается средствами ListView

рассмотрим, например, синхронный вариант

В событии OnClientConnect ты добавляешь новый TListItem к своему списку и ассоциируешь его с ДАННЫМ клиентом

li := ListView.Items.Add;
//Socket - это 2-й параметр метода-обработчика события
li.Data := Socket; //прямая ссылка  
Socket.Data := li; //реверсивная ссылка

В событии OnClientDisconnect ты удаляешь TListItem, ассоциированный с ДАННЫМ клиентом, из своего списка

//Socket - это 2-й параметр метода-обработчика события

или
TListItem(Socket.Data).Delete; //поиск по прямой ссылке

или
ListView.FindData(0, Socket, True, False).Delete; //поиск по реверсивной ссылке


 
Digitman ©   (2004-03-17 13:34) [4]


> а на OnClientDisconnect не реагирует


потому что отключившийся клиент (т.е. тот кто явился причиной возбуждения данного события) в момент обработки события (вплоть до возврата из обработчика) все еще фигурирует в списке ActiveConnections (он будет исключен из упомянутого списка СРАЗУ же после завершения тобой обработки события) .. так устроен TServerSocket .. и правильно он устроен, потому что смысл события OnClientDisconnect - указать тебе на клиента, который только что отключился, чтобы ты отреагировал на это событие нужным тебе образом

вариантов привести твой собственный виз.список активных коннектов в соответствие со внутренним списком ActiveConnections всего два : синхронный и асинхронный

к примеру, пусть список активных коннектов у тебя отображается средствами ListView

рассмотрим, например, синхронный вариант

В событии OnClientConnect ты добавляешь новый TListItem к своему списку и ассоциируешь его с ДАННЫМ клиентом

li := ListView.Items.Add;
//Socket - это 2-й параметр метода-обработчика события
li.Data := Socket; //прямая ссылка  
Socket.Data := li; //реверсивная ссылка

В событии OnClientDisconnect ты удаляешь TListItem, ассоциированный с ДАННЫМ клиентом, из своего списка

//Socket - это 2-й параметр метода-обработчика события

или
TListItem(Socket.Data).Delete; //поиск по прямой ссылке

или
ListView.FindData(0, Socket, True, False).Delete; //поиск по реверсивной ссылке



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

Форум: "Сети";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.031 c
1-1082741990
Lena19
2004-04-23 21:39
2004.05.09
checkbox1.Font.Color:=clred; а в ответ тишина


3-1081591834
nika_ufc
2004-04-10 14:10
2004.05.09
проблема с АДО и Oracle


3-1081768638
very beginer
2004-04-12 15:17
2004.05.09
Вопрос по ADO


14-1082120862
Wiz@rd
2004-04-16 17:07
2004.05.09
IdPortMapper на WinAPI


1-1082743712
Черный прапорщик
2004-04-23 22:08
2004.05.09
Поведение формы





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