Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.056 Beiträge
 
Delphi 12 Athens
 
#9

AW: Client / Server Dateien senden und empfangen.

  Alt 2. Apr 2015, 03:56
MSDN-Library durchsuchenGetLastError > https://msdn.microsoft.com/de-de/lib.../ms681386.aspx
Zitat:
ERROR_INVALID_USER_BUFFER
1784 (0x6F8)
The supplied user buffer is not valid for the requested operation.
Delphi-Quellcode:
// SendFile
 Reset(F, 1);
try
  ...
  while dwFileSize > 0 do begin
    //FillChar(Buffer, SizeOf(Buffer), 0); // wozu?
    i := Min(dwFileSize, SizeOf(Buffer));
    BlockRead(F, Buffer, i);
    if Socket.SendBuffer(Buffer, i) <> i then
      raise Exception.Create('eine Fehlermeldung');
    Dec(dwFileSize, i);
  end;
finally
  CloseFile(F);
end;

// ReceiveFile
ReWrite(F, 1);
try
  while dwFileSize > 0 do begin
    i := Min(dwFileSize, SizeOf(Buffer));
    if Socket.ReceiveBuffer(Buffer, i) <> i then
      raise Exception.Create('eine Fehlermeldung');
    BlockWrite(F, Buffer, i);
    Dec(dwFileSize, i);
  end;
finally
  CloseFile(F);
end;
Und du solltest dich unbedingt mal mit Fehlerbehandlungen beschäftigen, aber vorallem auch mit dem Resourcenschutz,
denn Resourcenschutzblöcke (Try-Finally) fehlen in deinem Code an jeder Ecke.
Aber wir lieben ja unsere Speicherlecks und offenen Dateihandles, die bis zum Programmende bestehen bleiben.


Da die Funktion SendFile auf Form1 zugreifen muß (also eine der bösesten globalen Variablen), sollte man sich schon gedanken machen, nach dem Warum.
* Entweder FileInfo als Result und der Aufrufer gibt das dann aus (der bessere und vorallem total unabhängige Weg)
* oder der Aufrufer übergibt zumindestens seine Referenz (Parameter TForm1 ins SendFile aufnemen und Self übergeben > nicht zu empfehlen, da dann immer von TForm1 abhängig ist)
* oder die Prozedur als Methode in TForm1 > private aufnehmen
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Apr 2015 um 04:03 Uhr)
  Mit Zitat antworten Zitat