AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Dateien Senden (LNET) Empfang hängt sich auf
Thema durchsuchen
Ansicht
Themen-Optionen

Dateien Senden (LNET) Empfang hängt sich auf

Offene Frage von "Xeno1"
Ein Thema von Xeno1 · begonnen am 20. Dez 2009
Antwort Antwort
Xeno1

Registriert seit: 16. Dez 2009
1 Beiträge
 
Lazarus
 
#1

Dateien Senden (LNET) Empfang hängt sich auf

  Alt 20. Dez 2009, 14:47
Hallo allerseits

Ich hab hier mal ein Problem:

Und zwar verwende ich lNet in Lazarus und will damit dann auch dateien senden
und dann natürlich empfangen.
Wenn der Sender zu schnell Sendet wartet er auch brav bis er wieder Senden darf.
Eig sollter der Empfänger auch brav warten bis er weiter empfangen kann. Das tut er auch
aber dann wenn er wieder empfangen könnte liefert Get(b[0],Packetsize) weiterhin 0 zurück und er
empfangt nichts. Niemehr

Ich hab zum Senden folgendes Programmiert:
Delphi-Quellcode:
procedure TForm2.DateiSenden;
var dn:shortstring;
    Filestream:TFileStream;
    b:array of byte;
    rest,check:integer;
begin
  Opendialog1.Execute;
  dn:=Opendialog1.FileName;
  Filestream:=TFileStream.Create(dn,fmopenread);
  dn:=ExtractFileName(dn);
  Progressbar1.Max:=Filestream.Size;
  Progressbar1.Position:=0;
  setlength(b,PacketSize);
  if Assigned(FileTCP.Iterator) then repeat
                                 FileTCP.Send(shortstring('FILE'),sizeof(dn),FileTCP.Iterator);
                                 FileTCP.Send(dn,sizeof(dn),FileTCP.Iterator);
                                 FileTCP.Send(filestream.Size,sizeof(filestream.Size),FileTCP.Iterator);
                                 Filestream.Seek(0,sofrombeginning);
                                 repeat
                                   Filestream.Read(b[0],PacketSize);
                                   check:=0;
                                   repeat
                                     check:=FileTCP.Send(b[0],PacketSize,FileTCP.Iterator);
                                     caption:=inttostr(check);
                                     application.ProcessMessages;
                                     until check=PacketSize;
                                   Progressbar1.Position:=Filestream.Position;
                                   LTrans.Caption:=inttostr(Progressbar1.Position);
                                   LRemain.Caption:=inttostr(Progressbar1.Max-Progressbar1.Position);
                                   application.ProcessMessages;
                                   until Filestream.Size-Filestream.Position<PacketSize;
                                 if Filestream.Size-Filestream.Position>0 then
                                   begin
                                   rest:=Filestream.Size-Filestream.Position;
                                   setlength(b,rest);
                                   Filestream.Read(b[0],rest);
                                   check:=0;
                                   repeat
                                     check:=FileTCP.Send(b[0],rest,FileTCP.Iterator);
                                     application.ProcessMessages;
                                     until rest=check;
                                   Progressbar1.Position:=Filestream.Position;
                                   LTrans.Caption:=inttostr(Progressbar1.Position);
                                   LRemain.Caption:=inttostr(Progressbar1.Max-Progressbar1.Position);
                                   end;
                                 until not FileTCP.IterNext;
  FileStream.Free;
  Hide;
end;
und zum Empfangen
Delphi-Quellcode:
procedure TForm2.FileTCPReceive(aSocket: TLSocket);
var
    dn,s:shortstring;
    fsize:Int64;
    Filestream:TFileStream;
    b:array of byte;
    check:integer;
begin
if not downloading then
begin
asocket.Get(s,sizeof(dn));
if s='FILEthen
  begin
  Show;
  downloading:=true;
  asocket.Get(dn,sizeof(dn));
  LName.Caption:=string(dn);
  Filestream:=TFileStream.Create('./'+dn,fmcreate);
  asocket.Get(fsize,sizeof(fsize));
  LSize.Caption:=inttostr(fsize);
  Progressbar1.Max:=fSize;
  setlength(b,PacketSize);
  sleep(100);
  repeat
  check:=0;
  repeat check:=asocket.Get(b[0],PacketSize); application.ProcessMessages; caption:=inttostr(check); until check=PacketSize;
  FileStream.Write(b[0],PacketSize);
  Progressbar1.Position:=Filestream.Position;
  LTrans.Caption:=inttostr(Progressbar1.Position);
  LRemain.Caption:=inttostr(fsize-Progressbar1.Position);
  application.ProcessMessages;
  until fsize-Filestream.Position<PacketSize;
  if fsize-Filestream.Position>0 then
    begin
    setlength(b,fSize-Filestream.Position);
    repeat
      check:=asocket.Get(b[0],fsize-Filestream.Position);
      application.ProcessMessages;
      caption:=inttostr(check)
      until check=fsize-Filestream.Position;
    FileStream.Write(b[0],fsize-Filestream.Position);
    Progressbar1.Position:=Filestream.Position;
    LTrans.Caption:=inttostr(Progressbar1.Position);
    LRemain.Caption:=inttostr(fsize-Progressbar1.Position);
    end;
  Filestream.Free;
  if server then showmessage('Sie sind der Server wenn sie wollen, dass alle diese Datei erhalten müssen sie sie '+
                             'erneut verschicken');
  FileTCP.IterReset;
  downloading:=false;
  Hide;
  end;
end;
Hab auch mal versucht beim Empfang ganz am Anfang ein Haltepunkt zu setzten dass wird auch nicht mal mehr ausgelößt wenn er wieder Empfangen kann ansonsten hätte ich dass probiert eben weiterzuempfangen sobald dass wieder ausgelöt wird.

Ich weiß dass da noch ein paar Schönheitsfehler drinn sind aber erstmal wollte ichs zum laufen bringen bevor ich mich um den Benutzerkomfort und Schönheitskorrekturen kümmere.
Hab ich irgendwas grundsätzlich falsch gemacht oder wo liegt der Denkfehler?

Danke für die hilfe.
  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 06:32 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