![]() |
Stream Fehler
Hi DP'ler,
ich habe folgendes Problem. Ich sende über die UDP Komponente einen Stream an die Clientrechner bei uns im Netz. Wenn jetzt einer dieser Clients offline ist, dann bringt mir meine Hauptapplikation den Fehler: StreamWrite Error und schmiert ab. Folgender Code sendet den Befehl an die Clients:
Delphi-Quellcode:
Der Käse ist, das der ober try except Block anscheinend vollkommen ignoriert wird, denn wenn der Client aus ist schmiert die Software ab, anstatt die Message anzuzeigen. Ist der Client hingegen online funzt alles einwandfrei.
try
begin NMUDP1.ReportLevel := Status_BASIC; NMUDP1.RemoteHost := myhost; NMUDP1.RemotePort := RemotePort.Value; Mystream := TMemoryStream.Create; try MyStream.Write(mycommand[1], length(mycommand)); NMUDP1.SendStream(MyStream); finally MyStream.free; end; end; except ShowMessage('Fehler beim Senden'); end; Habt ihr eine Idee? |
Re: Stream Fehler
Hast du in der IDE beim Testen auch die Debugger Exceptions deaktiviert?
|
Re: Stream Fehler
Zitat:
unabhängig von deiner Frage ist es nicht zu empfehlen Daten über UDP zu senden. Wenn dabei ein Packet verloren geht bekommt das der sendende Rechner nicht mit. |
Re: Stream Fehler
Moin!
Ich kenne die Komponente nicht, aber ich glaube zu wissen, wo dranne es liegt: am nicht ordentlich gelesener Hilfe... Du übergibst der Komponente eine TStream Instanz, nun ist die Komponente bestimmt mit einem Thread aufgebaut, der im Hintergrund den Inhalt des Streams sendet. Somit wird das SendStream() sofort wieder verlassen und danach im Hintergrund gesendet. Wenn er nun so fleissig am Senden ist, kommst du und gibst den MemoryStream frei, was aber irgendwie ziemlich hinterhältig ist, da der Thread daraus noch Daten zum versenden lesen wollte... Also: Grundsätzlich ist es bei den Sockets (egal welche Komponente, ob NetMaster oder Indy) so, dass sie die Daten in einem Thread senden und wenn du denen einen Stream übergibst kann der mehrere MB gross sein und das dauert, daher dürfen die Streams nicht freigegeben werden - das macht die Komponente, wenn sie fertig ist. :? - ich hoffe ihr/du fasst es nicht falsch auf - nur mal so als Erklärung... MfG Muetze1 |
Re: Stream Fehler
@Muetze1: Danke für den Tip, werd ich checken ob die Kompo den Stream freigibt.
@Sharki: Hast du einen Vorschlag wie man es besser macht? Warscheinlich über eine der Indy Komponenten, aber welche? Grüßle |
Re: Stream Fehler
Zitat:
Entscheidend ist eingentlich das Du anstelle von UDP, TCP verwendest. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:53 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