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