![]() |
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 |
Re: Indy Mysterium
Abend Interritor,
Was frägst du denn ab ? Poste doch mal bitte n bissl Code. |
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; |
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.
|
Re: Indy Mysterium
oder vielleicht weil du aus einem thread heraus aufs form zugegriffen hast ohne synching ?!
|
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