![]() |
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 |
Re: Datei über IdTCPServer als String versenden
Moin!
Also ich mach das in meinem Prog so:
Delphi-Quellcode:
Hoffe das hilft dir ein bisschen!
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; Gruß Pascal |
Re: Datei über IdTCPServer als String versenden
und wie ist dann der code für den Client? :?
|
Re: Datei über IdTCPServer als String versenden
Zitat:
|
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.
|
Re: Datei über IdTCPServer als String versenden
geht das nicht auch umgekehrt? ich muss nämlich Daten vom Server zum Client schicken...
|
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.
|
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:
Client
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;
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; |
Re: Datei über IdTCPServer als String versenden
ok, hat sich erledigt!!
Delphi-Quellcode:
hat beim Server noch gefehlt!
AThread.Connection.Disconnect;
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