Конференция "Начинающим" » Indy рассылка [WinXP]
 
  • Lex © (21.10.08 13:41) [0]
    Здраствуйте подскажите пожалуйста, на компонентах 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 какая ?
  • Lex © (21.10.08 14:06) [2]
    да согласен, ну не в этом суть indy 10 я
  • Lex © (21.10.08 14:06) [3]
    Удалено модератором
  • Lex © (21.10.08 14:07) [4]
    Удалено модератором
  • Сергей М. © (21.10.08 14:15) [5]
    в 10-ке у сервера есть св-во-список Contexts, в котором у каждого элемента есть св-во Connection, у которого есть св-во-объект Binding, у которого есть методы приема и передачи для кооммуникации с ссотв.партнером по соединению
  • Lex © (21.10.08 17:40) [6]
    я пробовал им воспользоваться и раньше но не получилось, вот и сейчас не получается, после первого соединения клиента я пробовал так:

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


    подскажите пожалуйста как с контекстом работать? и кстати ведь Contexts - является List -ом почему в нём нет поля Count? как узнать сколько активных подключений?
  • Сергей М. © (21.10.08 18:36) [7]

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


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


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


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

    ЧТО тебе там не понятно ?
  • DVM © (21.10.08 21:55) [8]

    > Lex ©

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

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

    скорее TThreadList - потокобезопасная обертка над TList
  • DVM © (21.10.08 21:59) [10]

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

    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 до полного просветления.
 
Конференция "Начинающим" » Indy рассылка [WinXP]
Есть новые Нет новых   [134434   +28][b:0][p:0.001]