Hallo Leute,
Indy 10 scheint wahrscheinlich noch nicht so sehr vertreten zu sein..
Also ich habe mittlerweile einen Filetransfer zustande bekommen.

(unten seht ihr den Code)
Das funktioniert, so wie er da steht. Ich bin damit aber irgendwie nicht ganz zufrieden, denn:
- Ich würde die Datei gerne Paketchenweise übermitteln, um z.b eine Resumefunktion einzubauen, Fortschrittsanzeige zu realisieren oder Multiple Quellen zur Datenübermittlung einzusetzen (wie bei Emule oder ähnlichem)
- Transfergeschwindigkeiten zu drosseln.
Habt ihr diesbezüglich Ideen? Ich persönlich habe generell noch Verständnisprobleme bezüglich diesem TIdStreamVCL.
Wäre für Vorschläge sehr dankbar!!
Henry
Client:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
datei: TFileStream;
stream: TIdStreamVCL;
begin
if (opendialog1.Execute) then Datei := TFileStream.Create(opendialog1.FileName, fmOpenRead);
stream := TIdStreamVCL.Create(datei);
client.Connect;
client.socket.WriteLn(IntToStr(stream.Size));
client.Socket.WriteBufferOpen;
client.Socket.Write(stream);
client.Socket.WriteBufferFlush;
client.Socket.WriteBufferClose;
end;
Server:
Delphi-Quellcode:
procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
var
datei: TFileStream;
stream: TIdStreamVCL;
groesse: Int64;
begin
datei := TFileStream.Create('test.txt',fmCreate);
stream := TIdStreamVCL.Create(datei,true);
groesse := StrToInt(AContext.Connection.Socket.ReadLn());
AContext.Connection.Socket.ReadStream(stream, groesse);
datei.Free;
stream.Free;
end;