FRY82
Also ich möchte eine Datei von IdTCPServer zu IdTCPClient senden. Andersrum gehts perfekt.
Ich habe folgenden Code für das Senden vom Client zum Server verwendet:
Der Client:
--------------------------------------------------------------------
procedure TMain.btn_sendClick(Sender: TObject);
var
fs: TFileStream;
begin
if OpenDialog.Execute then begin
with IdTCPClient do
begin
fs := TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
try
OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
try
WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
CloseWriteBuffer;
except
CancelWriteBuffer;
raise;
end;
finally
Disconnect;
fs.Free;
end;
end;
end;
end;
///////////////////////////////////////////////////////////////////////////////////////////
Der Server:
--------------------------------------------------------------------
procedure TMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
fs: TFileStream;
SizeOfIncomingStream: integer;
begin
if SaveDialog.Execute then begin
fs := TFileStream.Create(SaveDialog.Filename, fmCreate or fmShareExclusive);
with AThread.Connection do
try
SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
ReadStream(fs, SizeOfIncomingStream); //und übergeben
finally
fs.Free;
end;
end;
end;
Das funktioniert wie bereits erwähnt auch perfekt. Nun möchte ich aber auch Dateien vom Server zum Client senden. Also habe ich mir gedacht, dass es gehen könnte, wenn ich den Code von Server und Client einfach umdrehe (Ich denke ihr wisst schon, wie ich das meine) aber es ging nicht. Die Datei ist einfach nicht angekommen. Soweit ich weiß hats sogar die Verbindung getrennt. Nun wäre ich sehr dankbar, wenn mir jemand helfen könnte. Aber ich hätts gern mit Indy, wenns geht^^
Schonmal THX im Vorraus!
mfg. FRY82
Ich habe folgenden Code für das Senden vom Client zum Server verwendet:
Der Client:
--------------------------------------------------------------------
procedure TMain.btn_sendClick(Sender: TObject);
var
fs: TFileStream;
begin
if OpenDialog.Execute then begin
with IdTCPClient do
begin
fs := TFileStream.Create(OpenDialog.FileName, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
try
OpenWriteBuffer; //stellt sicher, dass alle Daten versendet werden
try
WriteStream(fs, true, true, 0); {das 2. true ist wichtig!, da es bewirkt, dass die Größe des Streams mittels WriteInteger zuerst verschickt wird}
CloseWriteBuffer;
except
CancelWriteBuffer;
raise;
end;
finally
Disconnect;
fs.Free;
end;
end;
end;
end;
///////////////////////////////////////////////////////////////////////////////////////////
Der Server:
--------------------------------------------------------------------
procedure TMain.IdTCPServerExecute(AThread: TIdPeerThread);
var
fs: TFileStream;
SizeOfIncomingStream: integer;
begin
if SaveDialog.Execute then begin
fs := TFileStream.Create(SaveDialog.Filename, fmCreate or fmShareExclusive);
with AThread.Connection do
try
SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
ReadStream(fs, SizeOfIncomingStream); //und übergeben
finally
fs.Free;
end;
end;
end;
Das funktioniert wie bereits erwähnt auch perfekt. Nun möchte ich aber auch Dateien vom Server zum Client senden. Also habe ich mir gedacht, dass es gehen könnte, wenn ich den Code von Server und Client einfach umdrehe (Ich denke ihr wisst schon, wie ich das meine) aber es ging nicht. Die Datei ist einfach nicht angekommen. Soweit ich weiß hats sogar die Verbindung getrennt. Nun wäre ich sehr dankbar, wenn mir jemand helfen könnte. Aber ich hätts gern mit Indy, wenns geht^^
Schonmal THX im Vorraus!
mfg. FRY82