Autor Beitrag
unworldly
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Do 10.11.05 10:01 
Hallo,

Mir ist klar, dass ich nicht der Erste bin, der eine solche Frage stellt und ich kenne auch das Beispiel- Programm von DataCool.

Ich habe trotzdem eine Frage zum versenden von Datein. Allerdings nicht von Client zu Server, sondern umgekehert

Hier der Client- Code:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
//Die Verbindung wurd hergestellt...
procedure TForm1.btnReceiveClick(Sender: TObject);
begin
  if IdTCPClient1.Connected then IdTCPClient1.Disconnect;
  IdTCPClient1.Port:=6666;
  IdTCPClient1.Host:='127.0.0.1';
  try
    IdTCPClient1.Connect(3000);
  except
    //Fehler beim Verbinden
  end;
end;

//wenn die Verbindung hergestellt wurde...
procedure TForm1.IdTCPClient1Connected(Sender: TObject);
var
  FStream: TFileStream;
  FName: String;
  Dir: String;
begin
  //Datei empfangen
  Dir:=Edit1.Text;
  if(DirectoryExists(Dir)) then begin
    FName:=IdTCPClient1.ReadLn;//Name der Datei
    FStream := TFileStream.Create(Dir+FName,fmOpenWrite or fmCreate);
    FStream.Position:=0;
    try
      IdTCPClient1.ReadStream(FStream, -1, true);
      Memo1.Lines.Add(IntToStr(Round(FStream.Size/1024/1024))+' MB');
    finally
      FStream.Free;
      IdTCPClient1.Disconnect;
    end;
  end
  else begin
    //Verzeichniss nicht vorhanden
  end;
end;


Und der Server:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//Der Server wurde bereits aktiert...

procedure TForm1.IdTCPServer1Connect(AThread: TIdPeerThread);
var
  FStream: TFileStream;
  FName: String;
begin            
  //Datei versenden
  FName:=Edit1.Text;
  FStream := TFileStream.Create(FName, fmOpenRead);
  FStream.Position:=0;
  AThread.Connection.OpenWriteBuffer;
  try
    AThread.Connection.WriteLn(ExtractFileName(FName));//Name der Datei
    AThread.Connection.WriteStream(FStream, true, true, 0);// oder FStream.Size??
    AThread.Connection.CloseWriteBuffer;
    AThread.Connection.Disconnect;
  except
   AThread.Connection.CancelWriteBuffer;
  end;
  FStream.Free;
end;


Die Dateien kommen zwar an- teilweise sogar komplett- an, aber exe Files z.B. lassen sich nicht ausführen (und das Icon fehlt). Kann mir jemand meinen Fehler sagen??

Danke für jede Hilfe, LG, Michi