![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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 какая ?