AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Client / Server Dateien senden und empfangen.
Thema durchsuchen
Ansicht
Themen-Optionen

Client / Server Dateien senden und empfangen.

Ein Thema von codenoob · begonnen am 25. Mär 2015 · letzter Beitrag vom 2. Apr 2015
 
Benutzerbild von himitsu
himitsu

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

AW: Client / Server Dateien senden und empfangen.

  Alt 2. Apr 2015, 02: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
Ein Therapeut entspricht 1024 Gigapeut.

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


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz