Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Indy рассылка [WinXP]


Lex ©   (2008-10-21 13:41:00) 

Здраствуйте подскажите пожалуйста, на компонентах indy пишу сервер. Проблемма в том что нужно всем подключенным клиентам посылать сообщение. Как это сделать??? сервер indyTCP. В сокетах это делается так:

for I := 0 to ServerSocket1.Socket.ActiveConnections - 1 do
 begin
   if ServerSocket1.Socket.Connections[i].Connected then
   begin
     ServerSocket1.Socket.Connections[i].SendBuf(buf,SizeOf(buf));
   end;
 end;

а как в indy сделать цикл по соединениям???? Возможно ли это? заранее спасибо.


Сергей М.   (2008-10-21 22:04:00) [1]


> Contexts - является List -ом


Не трынди.
Не является и не являлся.

> после первого


Да хоть после столохматого


> как узнать сколько активных подключений


Штудировать класс TIdT hreadList до полного просветления.


DVM   (2008-10-21 21:59:00) [2]


> как узнать сколько активных

procedure TForm1.Button1Click(Sender: TObject);
begin
 with IdTCPServer1.Contexts.LockList do
   try
     Caption := IntToStr(Count);
   finally
     IdTCPServer1.Contexts.UnlockList;
   end;
end;


DVM   (2008-10-21 21:56:00) [3]


> и кстати ведь Contexts - является List -ом почему в нём
> нет поля Count?

скорее TThreadList - потокобезопасная обертка над TList


DVM   (2008-10-21 21:55:00) [4]


> Lex ©

У серверов инди (в терминологии инди 10) есть список так называемых контекстов. Можно пройтись циклом по этому списку и выполнить необходимые для каждого контекста действия. НО! Список контекстов предварительно надо залочить. Для этого у списка есть метод соответствующий. После прохода разлочить.


Сергей М.   (2008-10-21 18:36:00) [5]


> после первого соединения клиента я пробовал так


Попробуй после столохматого.


> так нельзя! (ошибка)


Справку читай, там ВСЕ написано.

ЧТО тебе там не понятно ?


Lex   (2008-10-21 17:40:00) [6]

я пробовал им воспользоваться и раньше но не получилось, вот и сейчас не получается, после первого соединения клиента я пробовал так:

var
 c:TIdContext;
begin
   c:=IdTCPServer1.Contexts[0];// так нельзя! (ошибка)
   c.Connection.Socket.WriteLn('hello!!!');
 end;  

подскажите пожалуйста как с контекстом работать? и кстати ведь Contexts - является List -ом почему в нём нет поля Count? как узнать сколько активных подключений?


Сергей М.   (2008-10-21 14:15:00) [7]

в 10-ке у сервера есть св-во-список Contexts, в котором у каждого элемента есть св-во Connection, у которого есть св-во-объект Binding, у которого есть методы приема и передачи для кооммуникации с ссотв.партнером по соединению


Lex   (2008-10-21 14:07:00) [8]

Удалено модератором


Lex   (2008-10-21 14:06:00) [9]

да согласен, ну не в этом суть indy 10 я


Lex   (2008-10-21 14:06:00) [10]

Удалено модератором


Сергей М.   (2008-10-21 14:01:00) [11]


> if ServerSocket1.Socket.Connections[i].Connected


Условие в данном контексте его проверки всегда будет истинным, поэтому проверка эа попросту бестолковая.


> на компонентах indy пишу сервер


Версия Indy какая ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо