Stream vokser med sockets
Jeg roder med at sende en tMemorystream via sockets.Problemet består i, at er stream'en over 8192 Bytes, går der kludder i det.
Jeg sender data således:
Stream := TMemoryStream.Create;
iImage.Picture.Bitmap.SaveToStream(Stream);
Socket.SendBuf(iStream.Memory^,iStream.Size);
Og jeg modtager data således:
procedure TReceive.SockRead(Socket: TCustomWinSocket;var Stream: TMemoryStream; var SizeRead: integer);
var
BlockSize : integer;
pMem : Pointer;
begin
if Socket.Receivelength > 0 then
begin
BlockSize := Socket.ReceiveLength;
SizeRead := Blocksize;
pMem := AllocMem( BlockSize );
// loop until all read
while BlockSize > 0 do
begin
Socket.ReceiveBuf( pMem^, BlockSize );
Stream.Write( pMem^, BlockSize );
BlockSize := Socket.ReceiveLength;
Inc(SizeRead,BlockSize);
if BlockSize > 0 then
ReAllocMem(pMem, BlockSize)
end;
Stream.Position := 0;
FreeMem(pMem);
end
else begin
pMem := nil;
SizeRead := 0;
end;
end;
Koden er stjålet her fra eksperten.
Problemet er at den modtaget stream er længere end den sendte. Og resultatet bliver et billede ude af sync.
Jeg har prøvet at modtage stream via
socket.receivebuf(.....) men den giver fejl.
Sender jeg streamen forkert, eller henter jeg den forkert.
