Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi quellcode frage zu einem datei senden tutorial mit den indys (https://www.delphipraxis.net/76297-quellcode-frage-zu-einem-datei-senden-tutorial-mit-den-indys.html)

ghost007 1. Sep 2006 15:23


quellcode frage zu einem datei senden tutorial mit den indys
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
ich hab mir das datei versenden per indys tutorial von datacool gesaugt.
Und komme damit recht gut klar, ich verstehe blos nicht wohin und wie er die empfangene datei abspeichert.
Hier der quellcode des servers der die datei empfängt:
Delphi-Quellcode:
unit f_Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, IdAntiFreezeBase, IdAntiFreeze, IdBaseComponent, IdComponent,
  IdTCPServer, ComCtrls;

type
   TfrmMainServer = class(TForm)
    gb_Einstellungen: TGroupBox;
    ed_Port: TEdit;
    TcpServer: TIdTCPServer;
    IdAntiFreeze1: TIdAntiFreeze;
    Label1: TLabel;
    cmd_StartServer: TButton;
    cmd_EndServer: TButton;
    Label2: TLabel;
    lab_SvrStatus: TLabel;
    gb_Threads: TGroupBox;
    ScrollBox1: TScrollBox;
    gb_Test: TGroupBox;
    pBar: TProgressBar;
    Label3: TLabel;
    lab_FileSize: TLabel;
    Label5: TLabel;
    lab_ReceivedBytes: TLabel;
    procedure cmd_StartServerClick(Sender: TObject);
    procedure cmd_EndServerClick(Sender: TObject);
    procedure TcpServerExecute(AThread: TIdPeerThread);
    procedure FormShow(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  frmMainServer: TfrmMainServer;

implementation

uses FileReceiver;

{$R *.DFM}

procedure TfrmMainServer.cmd_StartServerClick(Sender: TObject);
begin
   // erstmal eventuelle bestehende Verbindungen trennen
   TcpServer.Active := false;
   // Bindings leeren
   TcpServer.Bindings.Clear;
   // Port zuweisen, wenn kein gültiger Wert eingetragen ist 9876 als Standard verwenden
   TcpServer.DefaultPort := StrToIntDef(ed_Port.Text,9876);
   try
      TcpServer.Active := true;
   except
      raise;
   end;
   // Ist der Server erfolgreich gestartet worden ?
   if TcpServer.Active then begin
      // jetzt die Anzeige-Elemente dem Status anpassen
      cmd_EndServer.Enabled := true;
      cmd_StartServer.Enabled := false;
      lab_SvrStatus.Font.Color := clGreen;
      lab_SvrStatus.Caption := 'Gestartet';
   end;
end;

procedure TfrmMainServer.cmd_EndServerClick(Sender: TObject);
begin
   // Server anhalten/deaktivieren
   try
      TcpServer.Active := false;
   except
      raise;
   end;
   // Ist der Server erfolgreich beendet worden
   if not TcpServer.Active then begin
      // jetzt die Anzeige-Elemente dem Status anpassen
      cmd_EndServer.Enabled := false;
      cmd_StartServer.Enabled := true;
      lab_SvrStatus.Font.Color := clRed;
      lab_SvrStatus.Caption := 'Deaktiviert';
   end;
end;

procedure TfrmMainServer.TcpServerExecute(AThread: TIdPeerThread);
Var sClientMsg : String;
      FileReceiver : TFileReceiver;
begin
   try
      // Clientnachricht lesen
      sClientMsg := AThread.Connection.ReadLn(#$A,5500);
      FileReceiver := TFileReceiver.Create(AThread,sClientMsg);
      try
         // gültige Nachricht vom Client ?
         if FileReceiver.ServerMsgOK then begin
            // Datei jetzt empfangen
            if FileReceiver.Start then
               // Bestätigung zum Clientschreiben
               AThread.Connection.WriteLn('FILEOK')
            else
               // Error-Nachricht schreiben
               AThread.Connection.WriteLn('FILEERROR');
         end;
      finally
         FileReceiver.free;
      end;
   except
      AThread.Connection.Disconnect;
   end;
end;

procedure TfrmMainServer.FormShow(Sender: TObject);
begin
   // test-groupbox löschen
   gb_Test.free;
end;

end.

Im anhang befindet sich das oben beschriebene tutorial (server + client)

ghost007 1. Sep 2006 19:09

Re: quellcode frage zu einem datei senden tutorial mit den i
 
hat keiner ne idee?
is warscheinlich nich so schwer, aber ich komm net drauf..

MfG - Ghost

mkinzler 1. Sep 2006 19:31

Re: quellcode frage zu einem datei senden tutorial mit den i
 
Zitat:

ich verstehe blos nicht wohin und wie er die empfangene datei abspeichert.
Ist fest in TFileReceiver codiert:
Delphi-Quellcode:
sFileName := 'C:\'+sFileName;
mit Hilfe eines TFileStream

ghost007 1. Sep 2006 21:32

Re: quellcode frage zu einem datei senden tutorial mit den i
 
ähm, ok , also mit einem TFileStream.
Wo und wie hilft mir deine zeile code weiter?
Kannst du das vielleicht etwas präzisieren?
z.B. von welchem typ ist sFileName?
und wo und wie setzte ich die zeile ein?

Danke schon mal - Ghost

mkinzler 1. Sep 2006 21:40

Re: quellcode frage zu einem datei senden tutorial mit den i
 
Zitat:

Wo und wie hilft mir deine zeile code weiter?
das ist nicht mein Code sondern der Ausschnitt aus der Demo, in dem gespeichert wird. An dieser Stelle kannst du in der Demo anpassungen machen.

ghost007 1. Sep 2006 21:45

Re: quellcode frage zu einem datei senden tutorial mit den i
 
ist die zeile im client oder server?
irgendwie find ich die nicht ...
:wall: hab warscheinlich grade tomaten auf den augen.

MfG - Ghost

mkinzler 1. Sep 2006 21:48

Re: quellcode frage zu einem datei senden tutorial mit den i
 
In der Methode Start der Klasse TFileReceiver

ghost007 1. Sep 2006 21:56

Re: quellcode frage zu einem datei senden tutorial mit den i
 
ok, ich bin zu dumm dazu ^^
könntest du bitte den code ausschnitt mit der editierten speicherung auf C:/ posten?
Wäre nett.


Danke schon mal - Ghost

[EDIT]
gefunden

hm, blos wie kann ihc das zur laufzeit ändern?
[/EDIT]

mkinzler 1. Sep 2006 22:07

Re: quellcode frage zu einem datei senden tutorial mit den i
 
Zitat:

könntest du bitte den code ausschnitt mit der editierten speicherung auf C:/ posten?
Im Code ist der feste Pfad c:\ eingestellt. Duz könntest der Methode Start um einen Parameter für den Pfad erweitern, oder nen FileOpenDialog einbauen.

ghost007 1. Sep 2006 22:14

Re: quellcode frage zu einem datei senden tutorial mit den i
 
hm, also ich hab grade mal versucht nen SaveDialog einzubauen:
Delphi-Quellcode:
    f_Main.SaveDialog1.FileName:=sFileName;
    if SaveDialog1.Execute then
       sFileName :=SaveDialog1.FileName;
Aber er sagt SaveDialog1 ist ein undeclared identifier.
Wie kann ich machen, das ich nicht nur variablen aus der unit f_Main sondern auch z.B. den SaveDialog nehmen kann?
[EDIT]
man muss die f_Main unter den uses haben und dann vo SaveDialog1 den namen der form nehmen.
Sieht dann so aus:
Delphi-Quellcode:
    frmMainServer.SaveDialog1.FileName:=sFileName;
    if frmMainServer.SaveDialog1.Execute then
       sFileName :=frmMainServer.SaveDialog1.FileName;
[/EDIT]

Danke - Ghost

mkinzler 1. Sep 2006 22:18

Re: quellcode frage zu einem datei senden tutorial mit den i
 
Füge der TFileReceiver-Klasse eine Variable der Savedialog-klasse hinzu. Diese kannst du dann dynamisch entweder für die Laufzeit (Konstruktor/Destruktor) oder bei Bedarf (in Methode Start) erzeugen und zerstören.

ghost007 1. Sep 2006 22:32

Re: quellcode frage zu einem datei senden tutorial mit den i
 
Liste der Anhänge anzeigen (Anzahl: 1)
das mit dem save dialog hab ich ja nun.
aber irgendwie freezen die anwendungen wenn ich nen file schick und er wird nur 20KB groß und wird nicht fertig gescchickt.
im anhang der server und der client.
als ip geb ich localhost ein und den port lass ich so dann server starten und per client ne datei senden.
-> geht bie mir nicht, warum?

[EDIT]
ich hab nen router, aber das sollte ja nicht stören, wenn ich an localhost schicke,oder?
[/EDIT]

MfG - Ghost

SirThornberry 2. Sep 2006 05:39

Re: quellcode frage zu einem datei senden tutorial mit den i
 
@ghost007: Wenn ich das richtig verstanden habe handelt es sich um eine Demo wie man das ganze handhabt. Dementsprechend solltest du versuchen die Demo zu verstehen bzw. was die Demo macht und nicht die Demo nur ändern an den Stellen die dir nicht passen die andere raus suchen denn so lernst du rein gar nix.

ghost007 2. Sep 2006 09:21

Re: quellcode frage zu einem datei senden tutorial mit den i
 
Du hast scho recht Sir Thornberry, aber momentan scheitert es bei mir daran das ich nicht verstehe warum die datei nicht gesendet wird bzw. warum das programm gefreezt wird.

[EDIT]
ich hab festgestellt, das die bei dem tutorial beigelegte exe datei funktioniert.
Wenn ich jedoch das tutorial server projekt, unverändert compiliere.
Funktioniert es nicht mehr.
Woran kann das liegen?
[/EDIT]

MfG - Ghost


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