Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Datei über IdTCPServer als String versenden (https://www.delphipraxis.net/29455-datei-ueber-idtcpserver-als-string-versenden.html)

Lenny-k 9. Sep 2004 11:06


Datei über IdTCPServer als String versenden
 
Hallo! Ich bin noch ziemlich neu in Delphi und möchte eine Datei mit Hilfe der IdTCPServer Komponente als String versenden!
Das klappt auch bei manchen Dateien, aber andere Dateien werden einfach an einer Stelle abgeschnitten :(
Gibt es noch eine andere Möglichkeit, Dateien über IdTCPServer zu verschicken, als als String?
Ich habe Delphi 7...

MfG Lenny

linobrocken 9. Sep 2004 11:44

Re: Datei über IdTCPServer als String versenden
 
Moin!

Also ich mach das in meinem Prog so:

Delphi-Quellcode:
procedure SEND();
var fs:TFilestream;
    Tempfile:string;

begin
//DasFile was du verschicken willst
Tempfile:="C:\temp\myfile.dat"
 //Überprüfen ob verbunden ist
 if not IdTCPClient.Connected then
  begin
   try
 //Sonst verbinden
    IdTCPClient.Connect;
   except
    ShowMessage('Falsche IP oder Port');
   end;
  exit;
  end;
//Filestream erzeugen
fs := TFileStream.Create(Tempfile, fmOpenRead or fmShareDenyWrite);
try
 IdTCPClient.OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
  try
   IdTCPClient.WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
   IdTCPClient.CloseWriteBuffer;
  except
   IdTCPClient.CancelWriteBuffer;
  raise;
 end;
finally
//Stream wieder freigeben
fs.free
end;
end;
Hoffe das hilft dir ein bisschen!

Gruß Pascal

Lenny-k 9. Sep 2004 21:03

Re: Datei über IdTCPServer als String versenden
 
und wie ist dann der code für den Client? :?

Sharky 10. Sep 2004 08:19

Re: Datei über IdTCPServer als String versenden
 
Zitat:

Zitat von Lenny-k
und wie ist dann der code für den Client? :?

Das ist doch der Code für den Client. Versendet wird über IdTCPClient und empfangen mit IdTCPServer

Luckie 10. Sep 2004 12:10

Re: Datei über IdTCPServer als String versenden
 
Die Frage ist hier wohl eher, wie sehen die Dateien aus, bei denne es nicht klappt und wie werden sie auf dem Client dargestellt. Eine binär Datei hat wohl nicht darstellbare Steuerzeichen. Und wenn da ein #0 vor kommt bricht die Darstelleung in einem TMemo ab, da das das Stringende Zeichen ist. Sollen also auch binär Dateien mit Steuerzeichen verschickt werden, dann sollte man einen Stream nehmen und diesen verschicken oder, was ich nicht empfehlen würde, die Datei mit base64 codieren.

Lenny-k 10. Sep 2004 13:12

Re: Datei über IdTCPServer als String versenden
 
geht das nicht auch umgekehrt? ich muss nämlich Daten vom Server zum Client schicken...

Luckie 10. Sep 2004 13:16

Re: Datei über IdTCPServer als String versenden
 
Was Server und was Client ist, ist relativ. Du kannst natürlich auch auf den Server eine TClientSocket packen und umgekehrt.

Lenny-k 10. Sep 2004 14:41

Re: Datei über IdTCPServer als String versenden
 
Ok... tut mir leid, dass ich nochmal alles über den Haufen werf, aber ich hab jetzt einfach selber mal versucht! Geht auch soweit, außer, dass ich das Problem hab, dass der Steam unendlich oft gesendet wird :| also die Datei unendlich groß wird ^^ vorrausgesetzt man unterbricht das Programm nicht...

Der Code:

Server
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AThread: TIdPeerThread);
var fStream:TFileStream;
begin
        fStream := TFileStream.Create('c:\test.ini',fmOpenRead   + fmShareDenyNone);
        AThread.Connection.OpenWriteBuffer;
        AThread.Connection.WriteStream(fStream);
        AThread.Connection.CloseWriteBuffer;
        FreeAndNil(fStream);
end;
Client
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var ftmpStream:TFileStream;
begin
with IdTCPClient1 do begin
    Connect;
    ftmpStream := TFileStream.Create('c:\test2.ini',fmCreate);
    while connected do
        ReadStream(fTmpStream,-1,true);
    FreeAndNil(fTmpStream);
    Disconnect;
    end;
end;

Lenny-k 10. Sep 2004 14:45

Re: Datei über IdTCPServer als String versenden
 
ok, hat sich erledigt!!

Delphi-Quellcode:
AThread.Connection.Disconnect;
hat beim Server noch gefehlt!
Danke für Eure Hilfe! :)


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