Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Dateien senden und empfangen (Delphi6/Indy9) (https://www.delphipraxis.net/103540-dateien-senden-und-empfangen-delphi6-indy9.html)

chri_ri 17. Nov 2007 01:01


Dateien senden und empfangen (Delphi6/Indy9)
 
Also ich habe jetzt schon die halbe Nacht im Internet gesucht und immernoch keine Lösung gefunden. Mein Problem ist das senden von Dateien zwischen TIdTCPClient und TIdTCPServer. Genauer gesagt eigentlich nur vom TIdTCPServer zum IdTCPClient. Andersrum gehts perfekt.



Ich verwende folgenden Code für das Senden vom Client zum Server (ein wenig vereinfacht und verändert):

Der Client:
--------------------------------------------------------------------
Delphi-Quellcode:
procedure TMain.btn_sendClick(Sender: TObject);
var
  fs: TFileStream;
begin
  if OpenDialog.Execute then begin
    with IdTCPClient do
    begin
      fs := TFileStream.Create(OpenDialog1.FileName, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
      try
        OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
        try
          WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
          CloseWriteBuffer;
        except
          CancelWriteBuffer;
          raise;
        end;
      finally
        Disconnect;
        fs.Free;
      end;
    end;
  end;
end;

Der Server:
--------------------------------------------------------------------
Delphi-Quellcode:
procedure TMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
  fs: TFileStream;
  SizeOfIncomingStream: integer;
begin
  if SaveDialog.Execute then begin
    fs := TFileStream.Create(SaveDialog.Filename, fmCreate or fmShareExclusive);
    with AThread.Connection do
      try
        SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
        ReadStream(fs, SizeOfIncomingStream); //und übergeben
      finally
        fs.Free;
      end;
  end;
end;


So. Nun noch einmal zu meiner Frage:
Wie kann ich umgedreht senden? Also nicht vom Client zum Server sondern vom Server zum Client?

Schonmal THX im Vorraus! :wink:



mfg. chri_ri

64Jabor 13. Aug 2008 16:57

Re: Dateien senden und empfangen (Delphi6/Indy9)
 
Also ich kenne mich leider nicht gut aus,
aber wie wäre es wenn du dazu einfach jedem Progammteil sowohl Server als auch Client beifügst?!
Beim Empfangen nutzt das Programm den Clienten und wenn der Benutzer etwas senden will macht er das per servermode. Hat den Vorteil dass du nur ein Programm schreiben musst mit immer demselben Code.
Hoffe das funkioniert so auch...

mfg 64Jabor

MSSSSM 13. Aug 2008 17:39

Re: Dateien senden und empfangen (Delphi6/Indy9)
 
Gibt es kein AThread.Connection.WriteStream?
Oder möchtest du das ganze später senden?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz