Конференция "Начинающим" » IdTCPServer indy9 -> indy10
 
  • Саня © (19.10.18 22:52) [0]
    Работал у меня на indy9 такой код(сервер посылает сообщение всем клиентам):
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
     Clients: TList;
     I: Integer;
    begin
     Clients := IdTCPServer1.Threads.LockList;
    try
     for I := 0 to Clients.Count-1 do begin
       try
         TIdPeerThread(Clients.Items[I]).Connection.Write('Hello');
       except
         TIdPeerThread(Clients.Items[I]).Stop;
       end;
     end;
    finally
     IdTCPServer1.Threads.UnlockList;
    end;



    Помогите, будьте добры, с эквивалентом на indy10
  • Саня © (20.10.18 01:53) [1]
    Подскажите, что не так с отправкой с сервера клиенту?


    unit Main;

    interface

    uses
     Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
     Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdContext, Vcl.StdCtrls,
     IdBaseComponent, IdComponent, IdCustomTCPServer, IdTCPServer, IdGlobal,
     IdTCPConnection, IdTCPClient, IdHTTP;

    type
     TMainForm = class(TForm)
       IdTCPServer: TIdTCPServer;
       Memo: TMemo;
       RunButton: TButton;
       procedure IdTCPServerExecute(AContext: TIdContext);
       procedure RunButtonClick(Sender: TObject);
     private
       Buffer: TIdBytes;
       IdContext: TIdContext;
       Str: AnsiString;
     public
       { Public declarations }
     end;

    var
     MainForm: TMainForm;

    implementation

    {$R *.dfm}

    procedure TMainForm.IdTCPServerExecute(AContext: TIdContext);
    var
     RecvStr: string;
     Size: Integer;
    begin
     IdContext := AContext;
     with AContext.Connection.IOHandler do begin
       if CheckForDataOnSource(10) then begin
         Size := InputBuffer.Size;
         if Size > 0 then begin
           InputBuffer.ExtractToBytes(Buffer, -1, False, 4);
           SetString(RecvStr, PAnsiChar(@Buffer[0]), Size);
           MainForm.Memo.Lines.Add(RecvStr);
         end;
       end;
     end;
    end;

    procedure TMainForm.RunButtonClick(Sender: TObject);
     i: Integer;
    begin
     Str := 'Hello'+#0;
     SetLength(Buffer,Length(Str));
     for i := 1 to Length(Str) do begin
       Buffer[i-1] := Ord(Str[i]);
     end;

     IdContext.Connection.IOHandler.Write(Buffer);
    end;

    end.
Есть новые Нет новых   [134427   +34][b:0][p:0.001]