AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Problem bei versenden größerer Dateien mit Indy 10
Thema durchsuchen
Ansicht
Themen-Optionen

Problem bei versenden größerer Dateien mit Indy 10

Ein Thema von storm1988 · begonnen am 30. Aug 2005 · letzter Beitrag vom 31. Aug 2005
Antwort Antwort
Benutzerbild von storm1988
storm1988

Registriert seit: 4. Aug 2005
Ort: Salzburg
91 Beiträge
 
Delphi 6 Professional
 
#1

Problem bei versenden größerer Dateien mit Indy 10

  Alt 30. Aug 2005, 19:00
Seas!

Ich hab mir folgenden Code zusammengebastelt um Datein vom Server an den Client zu senden, mithilfe der Indy 10 Komponente idtcp. Jedoch wenn ich Dateien über ca. 25 MB versende bekomme ich folgende Fehlermeldung: Der Prozess kann nicht auf die Datei zugreifen , da sie von einem anderen Prozess verwendet wird!!

Hier ist mal mein Code:

Client

Delphi-Quellcode:
procedure DateiSendeButtonClick;

var FStream : TFileStream;
    SizeOfIncomingStream : Integer;
    IDS : TidStreamVCL;

begin

  { Die Streams initialisieren - Beim IDS wird FStream gleich eingelesen }
  FStream := TFileStream.Create(Pfad, fmCreate);
  IDS := TidStreamVCL.Create(FStream);

  { Senden }
with frmServer.IdTCPClient1 do
  begin
      SizeOfIncomingStream := Socket.ReadInteger;;
      Socket.ReadStream(IDS, SizeOfIncomingStream);
  end;

  IDS.VCLStream.Position := 0;

  { Nicht vergessen ;-) }
  FStream.Free;
  IDS.Free;
end;
Server:

Delphi-Quellcode:
procedure KopierenToClient (AContext: TIdContext;Pfad : String);
var FSTream : TFileStream;
    SizeOfIncomingStream : Integer;
    IDS : TidStreamVCL;

begin

  FStream := TFileStream.Create(Pfad,fmOpenRead or fmShareDenyWrite)
  IDS := TidStreamVCL.Create(FStream);

  { Empfangen }
  with AContext.Connection do
  begin
      Socket.Write(IDS, 0, true);

  end;




  FStream.Free;
  IDS.Free;
end;
Könnte mir vielleicht sagen wo das Problem liegt, denn eigentlich sollte das versenden von Dateien mit Indy 10 ja auch ohne splitten gehn??

Mfg
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#2

Re: Problem bei versenden größerer Dateien mit Indy 10

  Alt 30. Aug 2005, 19:43
Ich hab schon ohne Probleme über 500 MB geschafft. Ich habe beim Öffnen fmShareDenyWrite nicht verwendet, glaube aber nicht, dass es daran liegt.
  Mit Zitat antworten Zitat
Benutzerbild von storm1988
storm1988

Registriert seit: 4. Aug 2005
Ort: Salzburg
91 Beiträge
 
Delphi 6 Professional
 
#3

Re: Problem bei versenden größerer Dateien mit Indy 10

  Alt 30. Aug 2005, 23:03
Ha habs selber raus gefunden. Es ist daran gelegen, dass die Prozedure "Socket.ReadStream(IDS, SizeOfIncomingStream)" in einem Thread behandelt wird (glaub ich zumindest, da der Timer bei meinem Client eine erneute verbindung zwischen der Datenübertragung aufgenommen hat).
Gibt es eine Mölichkeit, dass man das unterbindet also, dass das Programm erst die Übertragung abschließt????
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#4

Re: Problem bei versenden größerer Dateien mit Indy 10

  Alt 31. Aug 2005, 11:08
Timer? Dann ist es klar...

Probier doch folgendes:
Delphi-Quellcode:
// Von DSDT.info

procedure Pause(MilliSek: LongWord);
  var Start : Cardinal;
begin
  Start := GetTickCount;
  repeat
    Application.ProcessMessages
  until
    (GetTickCount - Start > MilliSek);
end;
also im Timer so:
Delphi-Quellcode:
DateiSenden;
Pause(25000); // für 25 Sekunden
Das Timer-Interval kann dann z.B. 1 Sekunde sein, da (zumindest bei mir) durch die Pause das ganze Programm angehalten wird.
  Mit Zitat antworten Zitat
Benutzerbild von storm1988
storm1988

Registriert seit: 4. Aug 2005
Ort: Salzburg
91 Beiträge
 
Delphi 6 Professional
 
#5

Re: Problem bei versenden größerer Dateien mit Indy 10

  Alt 31. Aug 2005, 11:13
Ja alles schön und gut aber wie soll ich wissen wie lang ich den Timer anhalten soll??? Des kommt ja sowohl auf die Übertragungsrate an als auch auf die Größe der Datei!!

Ich hab des ganze so realisiert dass ich am Anfang der Übertragung den Timer ausgeschaltet habe und bei der fertigen Übertragung hab ich ihn wieder eingeschalten!

Delphi-Quellcode:
Timer1.enabled := False;
DateiSenden;
Timer1.enabled := True;
Ist zwar nicht die schönste Lösung aber sie funktioniert.

Mfg st0rm
  Mit Zitat antworten Zitat
Benutzerbild von ManuMF
ManuMF

Registriert seit: 11. Jul 2005
1.016 Beiträge
 
Delphi 6 Personal
 
#6

Re: Problem bei versenden größerer Dateien mit Indy 10

  Alt 31. Aug 2005, 11:27
Solange gesendet wird, läuft der Timer einfach nicht.
Also ich halte das für mit die beste Lösung!
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz