![]() |
IDTelnet: Warten bis die Übertragung zu Ende ist (Ereignis)
Habe eine wichtige Frage, zu der ich einfach keine Lösung finde:
Wie kann ich feststellen, wenn ich per Idtelnet.Writeln(str) was abschicke, wann die Übertragung bei mir komplett zu Ende ist? Bei Telnet funktioniert das ja auch, bloß ich bekomme nirgends (in welchem Ereignis auch immer) eine Meldung, wenn der Antwortstream zu Ende ist... Please help, Bitburki |
Re: IDTelnet: Warten bis die Übertragung zu Ende ist (Ereign
Ob auf der Partnerseite irgendetwas angekommen ist und/oder verarbeitet wurde, dafür gibt keine Events.
Üblicherweise wird das über ein Protokoll als Frage und Antwortspiel geregelt. Hier ein Beispiel: ![]() |
Re: IDTelnet: Warten bis die Übertragung zu Ende ist (Ereign
Das ist mir klar, ich weiß auch daß auf der Partnerseite was angekommen ist, deswegen erhalte ich jetzt mehrere Daten (kommen auch an im onDataAvailable-Event). Jedoch kommen ziemlich viele Daten bei mir an (dauert auch so ca. 5 Sekunden bis alles empfangen wurde). Aber genau darum geht es: Da die Applikation im Batch läuft, muß diese wissen, wann diese x Sekunden um sind, sprich wann alles bei "mir" angekommen ist (Responsedaten).
Wenn ich den Standard Telnet Client nehme, funktioniert das auch, daß ich erst dann wieder was eingeben kann, wenn alles vorbei ist. Muß dazu sagen, daß das DataAvailable öfters durchlaufen wird (warum auch immer, wahrscheinlich kleinere Datenpakete), deswegen kann ich nicht sagen, daß wenn das Event "DataAvailable" fertig ist, auch alle Daten bei mir angekommen sind. |
Re: IDTelnet: Warten bis die Übertragung zu Ende ist (Ereign
Zitat:
Aber auch das Ende eines "logischen" Datenpakets wird im Protokoll geregelt. Wenn im Datenstrom ein CR LF eintrifft, dann sind die Daten vollständig und du kannst die zusammengesetzte Einzelpakete verarbeiten. So ist das z.B. beim SMTP oder POP3 geregelt. Bei binären Daten muss man vor den eigentlichen Nutzdaten die Länge der folgenden Daten mitteilen.
Delphi-Quellcode:
// Beispiel
var receivedata : string; procedure Txxxx.DataAvailable(...); var p : integer; begin // Daten anhängen receivedata := receivedata + socket.ReadString(); // prüfen ob schon fertig p := Pos(#13#10, receivedata); if p > 0 then begin Verabeite(Copy(receivedata, 1, p-1)); // verarbeite Daten löschen, der Rest könnte schon der Anfang des nächsten Datenpakets sein Delete(receivedata, 1, p+1); // ob hier jetzt +1 oder +2 stehen muss, bitte selber ausprobieren end; end; |
Re: IDTelnet: Warten bis die Übertragung zu Ende ist (Ereign
Danke für die Hilfe, es stimmt was du schreibst, jedoch haben wir hier ein anderes (eigenes) Protokoll.
Wir bekommen an jedem Datapaket ein CRLF, sprich das heißt noch nicht, daß es vollständig ist. Es ist aber so, daß wenn ein "=" am Satzanfang kommt, dann heißt das, daß die Übertragung nun zu Ende ist. Ich würde darauf ungern abfragen wollen, da Telnet das auch ohne das "=" mitbekommt. Also würde ich mein Programm auch gerne daraufhin umbauen. Nur mal zum Verständnis:
Delphi-Quellcode:
...
%2%1096:-1/0::276140000000000;276149999999999;2005;01.05.2005;Maifeiertag %2%1097:-1/0::276140000000000;276149999999999;2005;28.03.2005;Ostermontag %2%1098:-1/0::276140000000000;276149999999999;2005;25.03.2005;Karfreitag %2%1099:-1/0::276140000000000;276149999999999;2005;01.01.2005;Neujahr %2%1100:-1/0::276140000000000;276149999999999;2005;25.12.2005;1. Weihnachtsfeiertag %2%1101:-1/0::276140000000000;276149999999999;2005;05.05.2005;Christi Himmelfahrt %2%1102:-1/0::276150000000000;276159999999999;2005;16.05.2005;Pfingstmontag %2%1103:-1/0::276150000000000;276159999999999;2005;26.12.2005;Weihnachtsfeiertag %2%1104:-1/0::276150000000000;276159999999999;2005;25.12.2005;Weihnachtsfeiertag %2%1105:-1/0::276150000000000;276159999999999;2005;03.10.2005;Tag der Einheit %2%1106:-1/0::276150000000000;276159999999999;2005;05.05.2005;Himmelfahrt %2%1107:-1/0::276150000000000;276159999999999;2005;28.03.2005;Ostermontag %2%1108:-1/0::276150000000000;276159999999999;2005;25.03.2005;Karfreitag %2%1109:-1/0::276150000000000;276159999999999;2005;06.01.2005;Erscheinungsfest %2%1110:-1/0::276150000000000;276159999999999;2005;01.01.2005;Neujahr %2%1111:-1/0::276150000000000;276159999999999;2005;01.05.2005;Maifeiertag %2%1112:-1/0::276150000000000;276159999999999;2005;31.10.2005;Reformationstag %2%1113:-1/0::276160000000000;276169999999999;2005;25.03.2005;Karfreitag %2%1114:-1/0::276160000000000;276169999999999;2005;25.12.2005;Weihnachten %2%1115:-1/0::276160000000000;276169999999999;2005;31.10.2005;Reformationstag %2%1116:-1/0::276160000000000;276169999999999;2005;03.10.2005;Tag d. Deutsch. Einheit %2%1117:-1/0::276160000000000;276169999999999;2005;16.05.2005;Pfingstmontag %2%1118:-1/0::276160000000000;276169999999999;2005;05.05.2005;Himmelfahrt %2%1119:-1/0::276160000000000;276169999999999;2005;28.03.2005;Ostermontag %2%1120:-1/0::276160000000000;276169999999999;2005;01.01.2005;Neujahr %2%1121:-1/0::276160000000000;276169999999999;2005;26.12.2005;Weihnachten %2%1122:-1/0::276160000000000;276169999999999;2005;01.05.2005;Maifeiertag =2%1123:1/121:FEIERTAG:Anzahl Datenzeilen - 1122;Select BNR15_FV,BNR15_FB,JAHR,DATUM,FEIERTAG from HTX.FEIERTAG for fetch only;Stand=15.08.2007/08.41.42.99094 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 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