Показать сообщение отдельно
  #9  
Старый 14.12.2011, 09:02
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
    FileStreamSize: Integer;
    FileNum: Integer;
    FileStream: TFileStream;
    FileTotalRead: Integer;
    procedure SendFile(FileName: String);
    procedure Button1Click(Sender: TObject);

procedure TForm1.Button1Click(Sender: TObject);
begin
  SendFile('g:\__Data\22112011111.jpg');
  SendFile('g:\__Data\23112011113.jpg');
end;

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  Buffer: array of Byte;
  Len: Integer;
begin
  Len:=AData.Size;
  if Len=0 then Exit;
  SetLength(Buffer, Len);
  if FileStreamSize=-1 then
  begin
    FileStream:=TFileStream.Create('d:\Downloads\'+IntToStr(FileNum)+'.jpg', fmCreate);
    Inc(FileNum);
    AData.ReadBuffer(Buffer[0], Len);
    FileStreamSize:=PInteger(@Buffer[0])^;
    FileTotalRead:=0;
    Memo1.Lines.Add('>> '+IntToStr(FileStreamSize));
  end else
  begin
    Len:=AData.Read(Buffer[0], Len);
    Inc(FileTotalRead, Len);
    FileStream.Write(Buffer[0], Len);
    if FileTotalRead=FileStreamSize then
    begin
      FileStream.Free;
      FileStreamSize:=-1;
      Memo1.Lines.Add('<<');
    end;
  end;
end;

procedure TForm1.SendFile(FileName: String);
var
  FileStream: TFileStream;
  Buffer: array [0..$fff] of Byte;
  Len: Integer;
begin
  FileStream:=TFileStream.Create(FileName, fmOpenRead);
  try
    PInteger(@Buffer[0])^:=FileStream.Size;
    IdUDPClient1.SendBuffer('10.162.48.4', IdUDPClient1.Port, Buffer[0], SizeOf(Integer));
    repeat
      Len:=FileStream.Read(Buffer[0], Length(Buffer));
      IdUDPClient1.SendBuffer('10.162.48.4', IdUDPClient1.Port, Buffer[0], Len);
      Application.ProcessMessages;
      Sleep(10);
    until Len=0;
  finally
    FileStream.Free;
  end;
end;

http://zalil.ru/32271727
__________________
Пишу программы за еду.
__________________
Ответить с цитированием