Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stream über TCP an Rechner schicken (https://www.delphipraxis.net/112877-stream-ueber-tcp-rechner-schicken.html)

kujin1000 28. Apr 2008 19:18


Stream über TCP an Rechner schicken
 
:)

Ich hab die DP lange durchsucht. Ich möchte mit den Indys eine EXE mit einem Server und eine mit einem Client machen. Beide sind nicht im selben lokalen Netzwerk, sondern irgendwo im Internet. Über die IP möchte ich gerne Pakete via TCP senden und empfangen. Mit einem Stream natürlich. Dieser Stream soll die Überwachungsbilder einer Webcam anzeigen.

Doch ich habe nirgends ein komplettes Beispiel gefunden, wie man Streams erstellt, übergibt, etc. Hab halt noch nie etwas mit Streams gemacht. Wäre über jedes Beispiel dankbar. :)

alleinherrscher 28. Apr 2008 21:22

Re: Stream über TCP an Rechner schicken
 
Hey! Guck dir einfach diesen Code an:

Filestream mit Indy

Dort wird eine Datei in einen Filestream geladen und versendet.

Du kannst aber jeden beliebigen Stream versenden, also auch einen MemoryStream:

Delphi-Quellcode:

procedure TSendeForm.DateiSendeButtonClick(Sender : TObject);
var
  MStream: TMemoryStream;
  IDS: TidStreamVCL;

begin
  { Hier wird die Datei "ermittelt" }
  TCPSender.Host := HostEdit.text;
 
  { Die Streams initialisieren - Beim IDS wird FStream gleich eingelesen }

 

  MStream := TMemoryStream.create;

  //jetzt irgendwas in den Stream laden, beispeilsweise ein Bild, oder so:

  aBitmap.savetostream(MStream);

  //nun den Stream versenden:


  try
    IDS := TidStreamVCL.Create(MStream);
    try
      { Senden }
      with TCPSender do
      begin
        Connect;
        try
          Socket.Write(IDS, 0, true);
        finally
          Disconnect;
        end;
      end;
    finally
      FreeAndNil(IDS);
    end;
  finally
    FreeAndNil(FStream);
  end;
end;

Empfänger läuft so:

Delphi-Quellcode:
procedure TEmpfangsForm.TCPReceiverExecute(AContext: TIdContext);
var
  MSTream: TMemoryStream;
  SizeOfIncomingStream: Integer;
  IDS: TidStreamVCL;
begin
  { Wo soll die Datei gespeichert werden? }


  { Wieder die Streams }
  MStream := TMemoryStream.create;

 
    IDS := TidStreamVCL.Create(FStream);
    try
      { Empfangen }
      with AContext.connection do
      begin
        try
          SizeOfIncomingStream := Socket.ReadInteger;
          Socket.ReadStream(IDS, SizeOfIncomingStream);
        finally
          Disconnect;
        end;
      end;

      { Damit der Inhalt von IDS in FStream übertragen wird }
      IDS.VCLStream.Position := 0;
    finally
      FreeAndNil(IDS);
    end;
  //jetzt kannste irgendetwas mit dem Stream machen, z.B. wieder in ein bitmap laden:

  aBitmap:=TBitmap.create;
  aBitmap.loadfromstream(MStream);


end;
Ist eig. ziemlich einfach und alles(!!) im Forum zu finden...

LG, Alleinherrscher

kujin1000 29. Apr 2008 14:30

Re: Stream über TCP an Rechner schicken
 
Supi, nur leider gibt es ein kleines Problem.

Delphi-Quellcode:
[Error] Unit1.pas(227): Undeclared identifier: 'TidStreamVCL'
Habe alle Threads darüber gelesen. Aber eine funktionierende Lösung gab es nicht. :( Ich habe Delphi 7 + Indy 10. Nun weiß ich ja nicht, auf welche Alternativen ich zurückgreifen kann bei einem Videostream.

STS301 29. Apr 2008 14:39

Re: Stream über TCP an Rechner schicken
 
in die Useslist eingefügt, IdGlobal dabei??

kujin1000 29. Apr 2008 14:52

Re: Stream über TCP an Rechner schicken
 
idglobal und IdStreamVCL hab ich drin

wi gesagt. die normalen möglichkeiten funzen nicht :(

STS301 29. Apr 2008 14:57

Re: Stream über TCP an Rechner schicken
 
schau mal hier, der hatte das selbe Problem


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:01 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