-
Работал у меня на 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
-
Подскажите, что не так с отправкой с сервера клиенту?
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.
|