Hallo Delphi Programmierer.
Ich habe 2 Anwendungen die eine läuft als Client und die andere als Server.
Dabei benutze ich die TClient/TServer Socket.
Um mehrere Dateien gleichzeitig zu senden erstelle ich zur laufzeit immer wieder einen Client der die entsprechende Datei dann sendet.
Wenn ich z.b 2 oder 3 Dateien gleichzeitig versende funktioniert alles gut.
Aber sobald es dann mehr als 4 Dateien sind die gleichzeitig gesendet werden, passiert es dann das die empfangenen Dateien manchmal fehlerhaft sind.
Zum Testen werden meistens Bilder verwendet und die haben dann fehler wenn man sie anschaut.
Sobald ein neuer Client erstellt wird sendet dieser die Datei so.....
Delphi-Quellcode:
FileHandle := CreateFile(pchar(File_Pfad),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
FileSize := GetFileSize(FileHandle,nil);
SendData(Socket,'FileTransfer|OpenFile|' + inttostr(FileSize));
while FileNotEnd do begin
if FileSize - 4096 > 0 then begin
SetLength(Data,4096);
ReadFile(FileHandle,pointer(Data)^,4096,BytesRead,0);
FileSize := FileSize - 4096;
SendData(Socket,'FileTransfer|WriteFile|' + Data);
Sleep(10);
end else begin
SetLength(Data,FileSize);
ReadFile(FileHandle,pointer(Data)^,FileSize,BytesRead,0);
SendData(Socket,'FileTransfer|WriteFile|' + Data);
Sleep(10);
FileNotEnd := False;
SendData(Socket,'FileTransfer|CloseFile');
CloseHandle(FileHandle);
end;
end;
Delphi-Quellcode:
procedure SendData(Socket: TClientSocket; Data: string);
var
Temp: ansistring;
begin
while (Length(Data) > 0) and (Socket.Connected) do begin
Temp := AnsiString(Copy(Data,1,4096));
Delete(Data,1,4096);
repeat
Sleep(5);
until Socket.SendBuffer(pointer(Temp)^,length(Temp)) <> -1;
sleep(5);
end;
end;
Sende ich zu schnell so das die Sockets nicht hinterher kommen?
Komisch ist das es ersst auftritt sobald ich mehr als 4 Bilder Gleichzeitig versende.
Danke schonmal im voraus.