Danke erstmal,
Klappt aber nicht habe ich schon probiert ich stelle mal meinen ganzen Code rein so der Server arbeitet ohne Probleme deswegen habe ich nur den Client Code rein gestellt!
Wenn ich den Code ausführe schreibt er die Datei auch auf platte er kann sie aber nicht in dem Image Feld zeigen er sagt immer Error Datei wird bereits von einem anderen Prozess benutzt! ICh verstehe das nicht allerdings Programmiere ich auch noch nicht solange und vielleicht ist es nur ein ganz einfacher Fehler währe echt froh wenn ich das hinkreigen könnte, und mir einer Helfen kann!
Eigentlich brauche ich nur unter dem Ereigniss OnCLientread eine Anweisung die mir sat wenn die Datei komplett übertragen ist denn die OnClientread Procedur wird ja solange ausgeführt bis die Datei komplett ist!
Aber das Problem ist wie kann ich abfangen wann die Datei komplett übertragen ist??? Dann könnte ich den Stream mit TStream.free frei machen!
Code:
procedure TForm1.Button8Click(Sender: TObject);
begin
if Assigned(FStream) then
begin
FStream.Free;
FStream := nil;
end;
if fileexists('c:\test.jpg') then begin
ClientSocket1.Socket.SendText('hole_datei'); //Befehl für Server zum holen der Datei
FStream := TFileStream.Create('c:\test.jpg', fmOpenWrite or fmShareDenyNone); //Datei erstellen
end
else exit;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
form1.Caption := 'CONNECTED';
end;
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Caption := 'NOT CONNECTED';
end;
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
Socket: TCustomWinSocket);
begin
Form1.Caption := 'CONNECTING';
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
// In dieser Procedur muss es doch ne möglichkeit geben raus zu finden ob die Datei
// komplett ist oder nicht und wenn sie komplett ist mache folgendes mit der IF Anweisung oder
// so
var
iLen: Integer;
datei:file;
Bfr: Pointer;
MyString:string;
begin
iLen := Socket.ReceiveLength;
GetMem(Bfr, iLen);
try
Socket.ReceiveBuf(Bfr^, iLen);
FStream.Write(Bfr^, iLen);
finally
FreeMem(Bfr);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
FStream := nil;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
if Assigned(FStream) then
begin
FStream.Free;
FStream := nil;
end;
end;
Hoffe von euch kann mir jemand Helfen!