-
Здраствуйте подскажите пожалуйста, на компонентах 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 сделать цикл по соединениям???? Возможно ли это? заранее спасибо. -
Сергей М. © (21.10.08 14:01) [1]
> if ServerSocket1.Socket.Connections[i].Connected
Условие в данном контексте его проверки всегда будет истинным, поэтому проверка эа попросту бестолковая.
> на компонентах indy пишу сервер
Версия Indy какая ? -
да согласен, ну не в этом суть indy 10 я
-
Удалено модератором
-
Удалено модератором
-
Сергей М. © (21.10.08 14:15) [5]в 10-ке у сервера есть св-во-список Contexts, в котором у каждого элемента есть св-во Connection, у которого есть св-во-объект Binding, у которого есть методы приема и передачи для кооммуникации с ссотв.партнером по соединению
-
я пробовал им воспользоваться и раньше но не получилось, вот и сейчас не получается, после первого соединения клиента я пробовал так:
var
c:TIdContext;
begin
c:=IdTCPServer1.Contexts[0];// так нельзя! (ошибка)
c.Connection.Socket.WriteLn('hello!!!');
end;
подскажите пожалуйста как с контекстом работать? и кстати ведь Contexts - является List -ом почему в нём нет поля Count? как узнать сколько активных подключений? -
Сергей М. © (21.10.08 18:36) [7]
> после первого соединения клиента я пробовал так
Попробуй после столохматого.
> так нельзя! (ошибка)
Справку читай, там ВСЕ написано.
ЧТО тебе там не понятно ? -
> Lex ©
У серверов инди (в терминологии инди 10) есть список так называемых контекстов. Можно пройтись циклом по этому списку и выполнить необходимые для каждого контекста действия. НО! Список контекстов предварительно надо залочить. Для этого у списка есть метод соответствующий. После прохода разлочить. -
> и кстати ведь Contexts - является List -ом почему в нём
> нет поля Count?
скорее TThreadList - потокобезопасная обертка над TList -
> как узнать сколько активных
procedure TForm1.Button1Click(Sender: TObject);
begin
with IdTCPServer1.Contexts.LockList do
try
Caption := IntToStr(Count);
finally
IdTCPServer1.Contexts.UnlockList;
end;
end; -
Сергей М. © (21.10.08 22:04) [11]
> Contexts - является List -ом
Не трынди.
Не является и не являлся.
> после первого
Да хоть после столохматого
> как узнать сколько активных подключений
Штудировать класс TIdThreadList до полного просветления.