Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Über Indy versandte Dateien lassen sich nicht öffnen (https://www.delphipraxis.net/192220-ueber-indy-versandte-dateien-lassen-sich-nicht-oeffnen.html)

Benni0811 30. Mär 2017 10:15

Über Indy versandte Dateien lassen sich nicht öffnen
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo,

ich habe ein Programm geschrieben, mit dem man Dateien von einem Indy-Tcp-Client an einen Indy-Tcp-Server senden kann.

Sender:
Delphi-Quellcode:
procedure TForm2.SendButtonClick(Sender: TObject);
Var FStream:TFileStream;
begin
    FStream := TFileStream.Create(filename, fmOpenRead);
    with IdTcpClient1 do begin
        Connect;
        Socket.Write(FStream);
        Disconnect;
    end;
end;
Empfänger:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
Var
  FStream: TFileStream;
  SizeOfIncomingStream: Integer;
begin
    FStream := TFileStream.Create(filename, fmCreate);
    with AContext.Connection do begin
        SizeOfIncomingStream := Socket.ReadInteger(true);
        Socket.ReadStream(fstream, SizeOfIncomingStream, false);
        Disconnect;
    end;
end;
Das Problem: Die versendeten Dateien lassen sich nicht öffnen! Ich habe ein Bitmap-Bild und eine .exe Datei verschickt. Kann mir jemand sagen was das Problem ist?


Die Fehlermeldungen:

Klaus01 30. Mär 2017 10:18

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
.. vergleiche mal die Größe der Originaldatei mit der übertragenen Datei?

Du trennst die Verbindung nachdem ein oder mehrere Packete empfangen wurden.
Bist Du dir sicher das dann die gesamte Datei übertragen wurde?

Grüße
Klaus

Benni0811 30. Mär 2017 10:20

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
Die Dateigröße ist die selbe, außerdem laufen beide Programme auf einem Computer.

Zacherl 30. Mär 2017 10:23

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
Zeig mal den Code, mit dem du die Datei tatsächlich liest/schreibst.

Benni0811 30. Mär 2017 10:25

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
Passiert das nicht in dem Code den ich schon geschickt habe?
Im Programmcode wird sonst nur der Server aktiviert.

4dk2 30. Mär 2017 10:37

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
ich würde mir die empfangene Datei mal ansehen, wenn die Größe stimmt
z.b. mit:
HxD - HexEditor

nahpets 30. Mär 2017 10:41

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
Hinter
Delphi-Quellcode:
FStream := TFileStream.Create(filename, fmCreate);
bitte mal mit
Delphi-Quellcode:
FStream.Position := 0;
probieren.

Der schöne Günther 30. Mär 2017 10:43

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
1. Warum liest du in deinem Server erst einen Integer raus wie lang der Stream angeblich sein soll? Den schreibst du in deinen Button1Click doch auch nicht rein! Einfach weglassen und alles lesen

2. Mach den FileStream auch wieder zu am Schluss!


Delphi-Quellcode:
procedure TForm10.Button1Click(Sender: TObject);
var
   FStream:TFileStream;
begin
   FStream := TFileStream.Create(fileIn, fmOpenRead);
   try
      IdTcpClient1.Connect();
      IdTCPClient1.Socket.Write(FStream);
      IdTCPClient1.Disconnect();
   finally
      FStream.Destroy();
    end;
end;


procedure TForm10.IdTCPServer1Execute(AContext: TIdContext);
const
   fileOut = 'x:\zipfile_out.zip';
Var
   FStream: TFileStream;
begin
    FStream := TFileStream.Create(fileOut, fmCreate);
    try
       AContext.Connection.Socket.ReadStream(fstream);
       AContext.Connection.Disconnect();
   finally
      FStream.Destroy();
    end;
end;

So funktioniert das bei mir ohne Probleme...

Benni0811 30. Mär 2017 11:23

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
Also mein Code sieht jetzt so aus:

Sender:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
Var FStream:TFileStream;
begin
    FStream := TFileStream.Create(filename, fmOpenRead);
    with IdTcpClient1 do begin
        Connect;
        Socket.Write(FStream);
        Disconnect;
    end;
    FStream.Destroy;
end;
Empfänger:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
Var
  FStream: TFileStream;
begin
    FStream := TFileStream.Create(filename, fmCreate);
    FStream.Position := 0;
    with AContext.Connection do begin
        Socket.ReadStream(fstream);
        Disconnect;
    end;
    FStream.Destroy;
end;
Die Dateien lassen sich aber immernoch nicht öffnen. Ich habe die Dateien auch mit HxD-HexEditor geöffnet und sie sind unterschiedlich. Außerdem habe ich mal eine .txt-Datei verschickt, da hat alles perfekt funktioniert.

Der schöne Günther 30. Mär 2017 11:29

AW: Über Indy versandte Dateien lassen sich nicht öffnen
 
Komisch. Hast du eine Beispiel-Datei die nicht funktioniert? Und vielleicht einmal dein komplettes Projekt? Nicht dass sich da noch etwas drin versteckt das man nicht vermutet...


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:32 Uhr.
Seite 1 von 2  1 2      

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