ich versuche ein Bild von Client zum Server zu versenden. Das Problem ist, dass der String nicht komplett beim Server ankommt.
Das Bild wird mit dem Code versendet (was auch funktioniert)
Code: Alles auswählen
procedure TForm1.sendpic_btnClick(Sender: TObject);
var
jpg:TJPEGImage;
sdata:string;
stream:TMemoryStream;
begin
jpg:=TJPEGImage.Create ;
stream:=TMemoryStream.Create ;
jpg.LoadFromFile ('See.jpg');
jpg.SaveToStream (stream);
stream.Position :=0;
try
setlength(sdata, stream.Size );
stream.Read(sdata[1], stream.Size );
ltcp.SendMessage (sdata);
label3.Caption :='length sdata '+inttostr(length(sdata)); // <========== Länge des gesendeten Strings
finally
stream.Free ;
jpg.Free ;
sdata:=('');
end;
end;
Code: Alles auswählen
private
sdata:string;
procedure TForm1.LTCPReceive(aSocket: TLSocket);
begin
aSocket.GetMessage (sdata);
if length(sdata) > 0 then
label1.Caption := 'length sdata '+inttostr(length(sdata)); // <======== hier sieht man schon, dass der String nicht vollständig ankommt. Beim mehrmaligen versenden des Strings entspricht irgendwann die Länge des empfangenen Strings der Länge des gesendeten Strings, dann lässt sich das Bild in die TImage problemlos laden.
end;
procedure TForm1.start_btnClick(Sender: TObject); // <========= Bild in die TImage laden
var
s:string;
stream:TMemoryStream;
jpg:TJPEGImage;
begin
jpg:=TJPEGIMAGE.Create ;
stream:=TMemoryStream.Create ;
stream.Write (sdata[1], length(sdata));
stream.Position :=0;
jpg.LoadFromStream (stream);
image1.Picture.Assign (jpg);
stream.Free ;
jpg.Free ;
end;
Vielen Dank im voraus!