AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi [TCP] Bilderstreaming
Thema durchsuchen
Ansicht
Themen-Optionen

[TCP] Bilderstreaming

Offene Frage von "Chrissi91"
Ein Thema von Chrissi91 · begonnen am 2. Mai 2008 · letzter Beitrag vom 7. Mai 2008
Antwort Antwort
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#1

Re: [TCP] Bilderstreaming

  Alt 7. Mai 2008, 15:45
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) = 'Datenthen
        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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz