Folgenden Code nutze ich zum versenden:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var
maxUpl: Integer;
begin
maxUpl := ScrollBar1.Position * 1024;
//Max Byte Anzahl die gesendet werden darf
If maxUpl >= sM.Size - sM.Position then // Wenn mehr gesendet werden darf
begin // als noch zu senden ist:
ClientSocket1.Socket.SendBuf(Pointer(Int64(sM.Memory) + sM.Position)^,
sM.Size - sM.Position);
Timer1.Enabled := False;
end else begin // Soviel Bytes senden wie in maxUpl steht
ClientSocket1.Socket.SendBuf(Pointer(Int64(sM.Memory) + sM.Position)^,
maxUpl);
sM.Position := sM.Position + maxUpl;
end;
end;
Und folgenden zum Empfangen von Dateien:
Delphi-Quellcode:
var
rL: Integer;
begin
rL := Socket.ReceiveLength; // rL die Größe der empfangen Daten zuweisen
If rL = 0 then Exit; // Es kann sein das nix ankommt, das wäre schlecht ;)
If Rec then
begin // Wenn im Receive-Mode:
Socket.ReceiveBuf(Pointer(Int64(rM.Memory) + rM.Position)^, rL);
rM.Position := rM.Position + rL; // Position setzen
If rM.Position = rSize then // Wenn Datei vollständig:
begin
rM.SaveToFile('C:\Receive.txt'); // Datei Speichern
rM.Clear; // Stream leeren
Label1.Caption := 'Übertragung fertig';
Rec := False; // aus den Receive-Mode gehen
end;
end else begin
rSize := StrToInt(Socket.ReceiveText); // rSize die Größe der Datei zuweißen
rM.SetSize(rSize); // Speicher reservieren
rM.Position := 0; // Position auf Null setzen
Rec := True; // Auf Receive-Mode stellen
Socket.SendText('ok'); // Bestätigung senden
end;
end;
Das Problem ist nun, wenn ich die maximale Uploadgeschwindigkeit zB auf 16 KB stell und eine 500 KB große Datei verschick dann ist kurz nach der Hälfte der Datei Schluss mit empfangen, gesendet wird alles, zumindest wird es so angezeigt. Nur empfangen wird nur ca. die Hälfte, dann is ende mit Datentransfer beim Empfänger.
Ist die eingestellte Uploadgeschwindigkeit allerdings sehr hoch, dann tritt das Problem nicht auf.
Das Problem tritt auch nur im Internet auf, wo die Upload-/Downloadrate entsprechend auch nich so hoch is, im Netzwerk wird alles problemlos verschickt.
Allerdings habe ich keine ahnung, wieso das im Internet nicht geht.