Entwickler-Ecke
Internet / Netzwerk - IdTCPClient OnDisconnect Problem
alleinherrscher - Mi 21.06.06 20:13
Titel: IdTCPClient OnDisconnect Problem
Hi@all!
Man stelle sich folgendes vor: Ich habe einen TCPClient, der brav an den Server daten schickt. Das OnDisconnected Ereignis hab ich mit einer Prozedur verbunden, die momentan nix anderes macht, als einen Interger Counter hochzuzählen (inc(Counter))
Wenn ich jetz drei mal nach einander Daten verschicke bleibt der Counter auf dem Wert 0, daraus schließe ich jetzt mal, dass OnDisconnected gar nicht nach beenden des Übertragens aufgerufen wird...kann mir da jemand was zu erklären?
Imprinzip wollte ich folgendes machen: Während des Sendens soll es möglich sein, weitere Dateien zu verschicken. Und das wie folgt: Die noch zu versendenden Packete werden in einer Warteschleife gespeichert und sollen nacheinander an verschiedene Rechner (Server) verschickt werden, sobald die bestehende Verbindung beendet wird.
Das ganze sieht so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63:
| TQUEUE = class pack:TPACKAGE; Host:String; next:TQUEUE; end;
[...] var queue1:Tqueue;
[...] queue1:=NIL;
[...] procedure AddToQueue(pack:TPACKAGE;Host:String);
var GoThroughQueue,NewQueueElement:TQUEUE; begin
if queue1=nil then if not TCPClient1.connected then sendpackage(pack,host)
else begin queue1:=TQUEUE.Create; queue1.pack:=pack; queue1.Host:=Host; queue1.next:=NIL; end else begin NewQueueElement:=TQUEUE.Create; NewQueueElement.pack:=pack; NewQueueElement.Host:=Host; NewQueueElement.Next:=Nil;
GoThroughQueue:=queue1; while GoThroughQueue.Next<>NIL do GoThroughQueue:=GoThroughQueue.Next; GoThroughQueue.Next:=NewQueueElement; end;
end;
[...]
TCPClient1.OnDisconnected:=ExecuteQueue;
procedure ExecuteQueue(Sender:Tobject); begin counter:=counter+1;
if not (queue1=nil) then begin SendPackage(queue1.pack,queue1.Host); queue1:=queue1.next; end;
end; |
Leider wird nix gesendet, das ganze funktioniert nur solange Queue1=Nil ist, ExecuteQueue wird scheinbar nicht aufgerufen?!?
Kann mir jemand helfen?
Liebe Grüße,
ALleinherrscher
digi_c - Fr 23.06.06 09:02
OnDisconnect wird IMHO nur aufgerufen, wenn der Client/Server die Verbindung beendet wird und nicht wenn nur keine Daten mehr übertragen werden.
Beim anderen weiß ich aber auch nicht bescheid wie man das am besten macht...
alleinherrscher - Fr 23.06.06 16:35
digi_c hat folgendes geschrieben: |
OnDisconnect wird IMHO nur aufgerufen, wenn der Client/Server die Verbindung beendet wird und nicht wenn nur keine Daten mehr übertragen werden.
Beim anderen weiß ich aber auch nicht bescheid wie man das am besten macht... |
Danke, für deine Antwort :) Wäre schön, wenn OnDisconnect aufgerufen wird, wenn die Verbindung zwischen Client/Server beendet wird, denn: Sobald bei mir ein Datenpacket verschickt wurde (von Clinet an Server) schließt der Client die Verbindung, und müsste doch dann direkt in die OnDisconnect routine springen, und von dort aus über "sendpackage(...)" praktisch sich selber neu Verbinden, falls packete in der Warteschlange sind...
alias5000 - Fr 23.06.06 17:58
Du meinst vllcht eher sowas wie OnWorkEnd?
alleinherrscher - Fr 23.06.06 19:25
alias5000 hat folgendes geschrieben: |
| Du meinst vllcht eher sowas wie OnWorkEnd? |
Ich suche imprinzip nen Event aus was ausgeführt wird, wenn der Client die Verbindung getrennt hat, um dann ne neue Verbindung herstellen zu können.
Wenn ich mit OnWorkEnd arbeite kommt leider die Meldung "Already Connected", nur um das nochmal zu erklären:
Ich möchte nicht mehrere Streams mit einer Verbindung verschicken. Die Verbindung soll jedes mal vor dem Verschicken getrennt sein und dann neu aufgebaut werden, da jeder Stream theoretisch an einen anderen Server (also Computer mit IP) gesendet werden kann.
Viele Grüße
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!