Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi IDTelnet: Warten bis die Übertragung zu Ende ist (Ereignis) (https://www.delphipraxis.net/97687-idtelnet-warten-bis-die-uebertragung-zu-ende-ist-ereignis.html)

Burki 14. Aug 2007 15:08


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

shmia 14. Aug 2007 16:38

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:
http://de.wikipedia.org/wiki/Simple_...#Das_Protokoll

Burki 14. Aug 2007 17:11

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.

shmia 14. Aug 2007 17:38

Re: IDTelnet: Warten bis die Übertragung zu Ende ist (Ereign
 
Zitat:

Zitat von Burki
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.

Richtig, Datenpakete treffen einzeln ein und jedesmal wird das Event "DataAvailable" gefeuert.
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;

Burki 15. Aug 2007 07:42

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 05:52 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