Einzelnen Beitrag anzeigen

Chris1986

Registriert seit: 17. Jul 2003
Ort: Aachen
350 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Probleme beim Versenden von Dateien mit Indy TCPClient

  Alt 27. Sep 2003, 23:24
Hat denn keiner eine Idee?

Ich bin auch offen für Vorschläge . Also, wenn jemand weiß wie ich das komplett anders viel besser machen kann, dann nur her mit euren Ideen.

Für jemanden der Angst vor Viren hat, hier noch eben der Quelltext beider Programme:

Client:
Delphi-Quellcode:
unit mSentStream;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdAntiFreezeBase, IdAntiFreeze;

type
  TSentStream = class(TForm)
    IdTCPClient1: TIdTCPClient;
    btDateisenden: TButton;
    OpenDialog1: TOpenDialog;
    edIP: TEdit;
    Label1: TLabel;
    lbPort: TLabel;
    IdAntiFreeze1: TIdAntiFreeze;
    procedure btDateisendenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure Datei_senden;
  public
    { Public-Deklarationen }
  end;

var
  SentStream: TSentStream;

implementation

{$R *.dfm}

//Methode Datei_senden__________________________________________________________
procedure TSentStream.Datei_senden;
var
  fs: TFileStream;
begin
  if not OpenDialog1.Execute then exit;
  with IdTCPClient1 do
  begin
    fs:=TFileStream.Create(OpenDialog1.FileName,fmOpenRead or fmShareDenyWrite);
    Connect;
    if Connected = true
      then WriteLn(OpenDialog1.filename) //Der Filename wird verschickt
      else Showmessage ('nicht verbunden');
    try
      OpenWriteBuffer;
      try
        WriteStream(fs, true, true, 0);
        CloseWriteBuffer;
      except
        CancelWriteBuffer;
        raise;
      end;
    finally
      Disconnect;
      fs.Free;
    end;
  end;
end;
//Ende Methode Datei_senden_____________________________________________________


//Daten-Transfer starten________________________________________________________
procedure TSentStream.btDateisendenClick(Sender: TObject);
begin
  //Der Hostname wird auf das edit-Feld edIP gesetzt
  IdTCPClient1.Host := edIp.text;
  Datei_senden;
end;
//Ende Daten-Transfer starten___________________________________________________

end.
Server:
Delphi-Quellcode:
unit mGetStream;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, IdBaseComponent, IdComponent, IdTCPServer, StdCtrls;

type
  TGetStream = class(TForm)
    IdTCPServer1: TIdTCPServer;
    SaveDialog1: TSaveDialog;
    btaktivieren: TButton;
    edPfad: TEdit;
    edFilter: TEdit;
    lbFilter: TLabel;
    lbPfad: TLabel;
    edFilename: TEdit;
    lbFilename: TLabel;
    procedure IdTCPServer1Execute(AThread: TIdPeerThread);
    procedure btaktivierenClick(Sender: TObject);
  private
    { Private-Deklarationen }
    function trueFilename (Filename :TFilename) :tFilename;
    function filter (Filename :TFilename) :string;
  public
    { Public-Deklarationen }
  end;

var
  GetStream: TGetStream;

implementation

{$R *.dfm}

//idTCPServer1 OnExecute:_______________________________________________________
procedure TGetStream.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  fs: TFileStream;
  SizeOfIncomingStream: integer;
  Filename :TFilename;
begin
  //######################################
  Filename := Athread.Connection.ReadLn ;
  //trueFilename ist eine Funktion, die aus dem Pfad den Dateinamen filtert
  SaveDialog1.filename := truefilename (Filename);
  //SaveFilter ist eine Methode, um die Endung der Datei zu bestimmen
  SaveDialog1.Filter := filter (Filename);

  edPfad.text := filename;
  edFilename.text := SaveDialog1.Filename;
  edFilter.text := SaveDialog1.Filter;

  //######################################
  //Der SaveDialog wird ausgeführt und die Datei wird gespeichert.
  if not SaveDialog1.Execute then exit;
  fs := TFileStream.Create(SaveDialog1.Filename, fmCreate or fmShareExclusive);
  with AThread.Connection do
    try
      SizeOfIncomingStream := ReadInteger;
      ReadStream(fs, SizeOfIncomingStream);
    finally
      Disconnect;
      fs.Free;
    end;
end;
//Ende IdTCPServer1 OnExecute___________________________________________________


//Funktionen:___________________________________________________________________

//trueFilename ist eine Funktion, die aus dem Pfad den Dateinamen filtert
function TGetStream.trueFilename(Filename :TFilename):tFilename;
var backslash :boolean;
    i :integer;
begin
  i := 0;
  backslash := false;
  //Der Dateiname ohne Pfaangabe wird gefilter
  while backslash= false do
  begin
    if copy (Filename,length (Filename)-i,1) = '\'
      then begin
             trueFilename := copy (Filename,length (Filename)-i+1,i);
             backslash := true
           end
      else i := i+1;
  end;
end;

//Filter ist eine Funktion die im Filename nach der Endung sucht
function TGetStream.Filter (Filename :TFilename) :string;
var dot :boolean;
    i :integer;
begin
  i:= 0;
  dot := false;
  while dot= false do
  begin
    if copy (Filename,length (Filename)-i,1) = '.'
      then begin
             filter := '*.'+copy (Filename,length (Filename)-i+1,i)+
                       '|'+copy (Filename,length (Filename)-i+1,i);
             dot := true
           end
      else i := i+1;
  end;
end;
//Ende der Funktionen___________________________________________________________


//Serverstart:__________________________________________________________________
procedure TGetStream.btaktivierenClick(Sender: TObject);
begin
  if btaktivieren.Caption = 'Server aktivieren'
    then begin
           idtcpServer1.active := true;
           showmessage ('Dienst gestartet');
           btaktivieren.Caption := 'Server deaktivieren'
         end
    else begin
           idtcpServer1.active := false;
           btaktivieren.Caption := 'Server aktivieren'
         end;
end;
//Ende Serverstart______________________________________________________________
end.
Gruß
Christian
Es gibt nur 10 Typen von Menschen auf der Welt:
Die, die Binärcode verstehen und die, die es nicht tun . . .
  Mit Zitat antworten Zitat