Einzelnen Beitrag anzeigen

codenoob
(Gast)

n/a Beiträge
 
#1

Client / Server Dateien senden und empfangen.

  Alt 25. Mär 2015, 22:58
Hi,

Ich hab mal eine Frage.

Ich befasse mich seit kurzem mit den Socket Komponenten und dem senden und empfangen von Dateien.

Ich hab mich mit den TClientSocket / TServerSocket und den Indy TidTCPClient / TidTCPServer Komponenten bisschen befasst.
Die Dateien hab ich immer in ein TFileStream geladen und dann mit SendStram versendet.

Was mir dabei aufgefallen ist war das ich mit....

TClientSocket / TServerSocket nur Dateien mit max. 700MB und mit den Indy TidTCPClient / DidTCPServer bis max. 2GB Grösse versenden konnte.
Gibt es da bei den Komponenten ein Limit was die Grösse des Versendens angeht, oder hat das mit dem FileStream zu tun?


Ich habe da schon Codes gefunden der das ganze blockweise macht leider funktioniert das mit Delphi XE2 leider nicht ka. warum.

Delphi-Quellcode:
procedure SendFile(lpFileName: string; Socket1: TClientSocket);
var
  F: file;
  FileInfo: TFileInfo;
  dwFileSize, dwBytesRead: DWORD;
  Buffer: array[0..4096] of Char;
begin
  {$I-}
  AssignFile(F, lpFileName);
  Reset(F, 1);
  dwFileSize := FileSize(F);
  FileInfo.FileName := lpFileName;
  FileInfo.FileSize := dwFileSize;
  Socket1.SendBuffer(FileInfo, SizeOf(FileInfo));
  repeat
    FillChar(Buffer, SizeOf(Buffer), 0);
    BlockRead(F, Buffer, SizeOf(Buffer), dwBytesRead);
    Socket1.SendBuffer(Buffer, dwBytesRead);
  until (dwBytesRead = 0);
  CloseFile(F);
  {$I+}
end;

procedure ReceiveFile(Socket1: TClientSocket);
var
  F: file;
  lpFileName: string;
  FileInfo: TFileInfo;
  dwFileSize, dwBytesRead: DWORD;
  Buffer: array[0..4096] of Char;
begin
  Socket1.ReceiveBuffer(FileInfo, SizeOf(TFileInfo));
  lpFileName := FileInfo.FileName;
  dwFileSize := FileInfo.FileSize;
  {$I-}
  AssignFile(F, lpFileName);
  ReWrite(F, 1);
  repeat
    FillChar(Buffer, SizeOf(Buffer), 0);
    dwBytesRead := Socket1.ReceiveBuffer(Buffer, SizeOf(Buffer));
    BlockWrite(F, Buffer, dwBytesRead);
    Dec(dwFileSize, dwBytesRead);
  until (dwFileSize <= 0);
  CloseFile(F);
  {$I+}
end;
Kann mir da jemand bisschen unter die Arme greifen der sich damit auskennt und mir den richtigen Weg weisen? Bin absoluter Neuling....

Danke schon im Voraus und Lg. CodeNoob
  Mit Zitat antworten Zitat