Hi,
probiere es mal so:
Beispiel
Senden:
Delphi-Quellcode:
// ...
FStream := TMemoryStream.Create;
try
FBitmap.SaveToStream(FStream);
Buf := FStream.Memory;
with ServerSocket1.Socket do
begin
for i := 0 to ActiveConnections - 1 do
begin
Connections[i].SendText('Daten'
+ IntToStr(FStream.Size));
Sleep(50);
Connections[i].SendBuf(Buf^, FStream.Size);
end; {for i := 0 to ActiveConnections do}
end; {with ServerSocket1.Socket do}
finally
FStream.Free;
end;
Dabei wird zunächst mit SendText ein Header geschrieben, anschließend wird mit SendBuf das Bild übertragen. Die Anweisung Sleep verhindert, dass der Text und der Anfang der Daten zu einem Paket zusammengefasst werden – dann hätte der Client nämlich Probleme, sie wieder auseinander zu bekommen.
Empfang:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
var
a: array array[0..4096] of Byte;
i: integer;
s: string string;
begin
if FDaten = false then
begin
s := Socket.ReceiveText;
if Copy(s, 1, 5) = 'Daten' then
begin
Delete(s, 1, 5);
try
FSize := StrToInt(s);
FDaten := true;
Image1.Picture.Bitmap := nil nil;
FStream.Clear;
except
end;
end; {if Copy(s, 1, 5) = 'Daten' then}
end {if FDaten = false then}
else
begin
i := Socket.ReceiveBuf(a, 4096);
FStream.Write(a, i);
FPos := FPos + i;
if FPos >= FSize then
begin
FDaten := false;
FStream.Position := 0;
FPos := 0;
Image1.Picture.Bitmap.LoadFromStream(FStream);
end;
end; {else FDaten = false then}
Alle eintreffenden Daten werden nach FStream geschrieben. Sobald FPos gleich FSize ist, sind alle Daten eingetroffen. FDaten wird wieder auf false gesetzt und das
Bitmap aus dem Stream nach Image1 geladen.
Mfg Net7
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene
DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.