записть TStream в соккет INDY
Пробую с импользованием INDY10 написать процедуру по передачи потока TStream, есть такой вот код для записи потока в соккет
procedure TarCustomTCPSocket.WriteStream(AStream: TStream; AHandler: TIdIOHandler; ASleep: Integer; AContext: TIdContext);
var DataSize, BlockSize: integer;
Buffer: TBytes;begin
try
DataSize:=AStream.Size;
AHandler.WriteLn(IntToStr(DataSize));
SetLength(Buffer,TCP_SOCKET_BUFFER_SIZE);
while AStream.Position < AStream.Size do
begin
BlockSize:=AStream.Read(Buffer,TCP_SOCKET_BUFFER_SIZE);
AHandler.WriteLn(IntToStr(BlockSize));
// AHandler.WriteBufferOpen;
AHandler.Write(Buffer);
// AHandler.WriteBufferClose;
end;
except
on e: exception do
begin
doError('___Write Stream ERROR!!!'+#13+e.Message,FContext);
end;
end;
end;
и процедура для чтения потока из соккета
procedure TarCustomTCPSocket.ReadStream(AStream: TStream; AHandler: TIdIOHandler; AContext: TIdContext = nil);
var DataSize, BlockSize, readed: integer;
Buffer: TBytes;
begin
try
DataSize:=AHandler.ReadInteger;
AHandler.RecvBufferSize:=TCP_SOCKET_BUFFER_SIZE;
readed:=0;
while DataSize>readed do
begin
BlockSize:=AHandler.ReadInteger;
readed:=readed+BlockSize;
doEvent(Format('reading %d bytes of %d',[BlockSize,DataSize]),AContext);
FHandler.ReadBytes(Buffer,BlockSize,false);
end;
except
on e: exception do
begin
doError('___Read Stream ERROR!!!'+#13+e.Message,FContext);
end;
end;
end;
Так вот на выполнении AHandler.Write(Buffer); в процедуре WriteBuffer прога вылетает с ошибкой
В чём может быть дело
Пока на собственное сообщение не было ответов, его можно удалить.