Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy Mysterium (https://www.delphipraxis.net/23955-indy-mysterium.html)

Interritor 12. Jun 2004 21:07


Indy Mysterium
 
Hi zusammen,

Ich Programmier gerade eine Client\Server Anwendung mit der man Datein hin und her schicken kann. Jetzt stoß ich auf ein sehr komisches Problem und zwar wenn ich im IdTCPServer1Execute einen IF Abfrage mehr einbaue geht garnichts mehr d.h. er trennt die verbindung obwohl diese Anweisung nichts weiter macht als was in eine Memo zu schreiben. Nehm ich diese Anfrage raus funktioniert alles wieder wunderbar, ich versteh das einfach nicht.

Hoffe einer von euch kannmir helfen oder hat eine Idee.....

mfg
Andre

MrKnogge 12. Jun 2004 21:10

Re: Indy Mysterium
 
Abend Interritor,

Was frägst du denn ab ? Poste doch mal bitte n bissl Code.

Interritor 12. Jun 2004 21:19

Re: Indy Mysterium
 
Ja sicha, nicht über den code wundern ist noch absolute Test-Pfhase sind auch noch paar Test Outputs drinne:

Delphi-Quellcode:

rocedure TfrmMain.IdTCPServer1Execute(AThread: TIdPeerThread);
var
  fs: TFileStream;
  SizeOfIncomingStream: integer;
  NameOfIncomingStream : String;
  DateOfIncomingStream : String;
  flgsenden : Boolean;
begin
  NameOfIncomingStream := 'C:\test\'+ AThread.Connection.ReadLn;
  DateOfIncomingStream := AThread.Connection.ReadLn;

  if FileExists(NameOfIncomingStream) then begin

      // Das ist die besagte IF Abfrage
      if strtoint(FormatDateTime('dmyyyyhns',GetFileModifyDate(NameOfIncomingStream))) < strtoint(DateOfIncomingStream) then begin
        memo1.Lines.Add ('Kleiner');
      end;
      Memo1.Lines.Add ('False');
      Memo1.Lines.Add (DateOfIncomingStream);
      flgSenden := False;
  end
  else begin
    Memo1.Lines.Add (NameOfIncomingStream + ' true');
    flgSenden := True;
  end;

   
  if flgSenden = False then begin
  try
      AThread.Connection.WriteLn ('Close');
      Memo1.Lines.Add (NameOfIncomingStream + ' nicht senden');
  finally
     AThread.Connection.Disconnect;
  end;
  end
  else begin
    AThread.Connection.WriteLn ('Send');
    Memo1.Lines.Add (NameOfIncomingStream + ' senden');
    fs := TFileStream.Create(NameOfIncomingStream , fmCreate or fmShareExclusive);
    with AThread.Connection do
      try
        SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
        ReadStream(fs, SizeOfIncomingStream); //und übergeben
      finally
        Disconnect;
        fs.Free;
      end;
    end;
end;

MrKnogge 12. Jun 2004 21:26

Re: Indy Mysterium
 
hm, dann setz mal haltepunkte, und schau was in NameOfIncomingStream und in DateOfIncomingStream drin steht, ich vermute mal das beide informationen in NameOfIncomingStream steht, und somit nichts mehr für DateOfIncomingStream übrig ist.

supermuckl 13. Jun 2004 01:39

Re: Indy Mysterium
 
oder vielleicht weil du aus einem thread heraus aufs form zugegriffen hast ohne synching ?!

Jens Schumann 13. Jun 2004 09:03

Re: Indy Mysterium
 
Hallo,
supermuckl hat recht. Obwohl das OnExecute Event des IndyServers in der unit des Formulars steht
bedeutet das noch lange nicht, dass diese Methode auch im Hauptthread der Anwendung ausgeführt wird.
Bei den Indy's wird das OnExceute Event im Kontext des IndyThread's ausgeführt. Deshalb halb
sind irgendwelche Synchronisationsmechanismen erforderlich. Ich würde es mal mit Synchronize versuchen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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