Also, mein Problem ist:
Ich will ein Bitmap über ServerSocket->ClientSocket versenden. So ein bissel Quelltext hab ich schon:
Server
Delphi-Quellcode:
Bild := TBitmap.Create; // Das Bitmap zum Versenden
MS := TMemoryStream.Create; // Der dazugehörige Stream
MakeScreenShot(Bild);
Bild.SaveToFile('C:\temp.bmp');
Bild.SaveToStream(MS);
MS.Write('ENDE', 4);
MS.Position := 0;
ServerSocket1.Socket.Connections[0].SendStream(MS);
Das hier gespeicherte Bild ist nicht beschädigt und lässt sich öffnen
Client
Delphi-Quellcode:
var
Form1: TForm1;
MS: TMemoryStream;
procedure TForm1.Button6Click(Sender: TObject);
begin
if ClientSocket1.Active then
ClientSocket1.Socket.SendText('SCREENSHOT'); // Anfrage senden
MS := TMemoryStream.Create;
MS.Position := 0;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject); // Rückgabe (wird rund 670 mal aufgerufen)
Socket: TCustomWinSocket);
var text, reststr: string;
begin
text := Socket.ReceiveText;
begin
Label8.Caption := IntToStr(StrToInt(Label8.Caption)+1);
if Pos('ENDE', text) = 0 then
MS.Write(text, Length(text))
else
begin
MS.Write(text, Length(text) - 4);
MS.Position := 0;
MS.SaveToFile('C:\temp_client.bmp');
MS.Position := 0;
Image1.Picture.Bitmap.LoadFromStream(MS);
MS.Free;
end;
end;
Das hier resultierende Bitmap ist beschädigt und fehlerhaft.
Im Hex-Editor enthält dieses Bitmap folgende Zeichenkette, die rein gar nichts mit dem Ursprung zu tun hat (der Bitmap-Header fehlt auch):
Microsoft Windows GdiPlus ProcessorArchitecture="x86"
Keine Ahnung, wo das herkommt
rollstuhlfahrer