![]() |
Indy 10 UDP Aktualisieren
Hi
wie kann ich die UDPServerRead Prozedure per befehl (zb. Button) ausführen. Mein problem: Zwei Rechner, R1 startet das Programm, R2 auch. R1 sieht R2, aber nicht umgekehrt. Und wenn ich R2 schließe, dann wirft R1 den R2 nicht aus der Liste. Hier der Code:
Delphi-Quellcode:
procedure TForm1.userverUDPRead(Sender: TObject; AData: TBytes;
ABinding: TIdSocketHandle); var k: integer; RecText: String; MyList: TListItem; begin RecText := ''; for k:= 0 to length(AData)-1 do begin RecText := RecText + chr(AData[k]); end; MyList:= Namen.Items.Add; MyList.caption:= RecText; MyList.Subitems.Add(ABinding.PeerIP); end; |
Re: Indy 10 UDP Aktualisieren
Keiner eine Idee?
Vielleicht habe ich es zu kompliziert erklährt. Ich will die Prozedur manuel aufrufen (zb. Mit einem Button), damit ich immer sehen kann wer online ist. Oder gibt es da eine bessere Möglichkeit? |
Re: Indy 10 UDP Aktualisieren
habe es jetzt glaube ich geschafft (noch nicht ausprobiert)
Delphi-Quellcode:
wenn es nicht klappen sollte melde ich mich wieder
IdUDPServer1.OnUDPRead
|
Re: Indy 10 UDP Aktualisieren
hi
Wenn ich das
Delphi-Quellcode:
starten will, dann sagt er:
userver.OnUDPRead;
Nicht genügend wirkliche Parameter!" wie kann ich das lösen Hilfe! |
Re: Indy 10 UDP Aktualisieren
Delphi-Quellcode:
So schaut die entsprechende Signatur aus. Wenn du die Methode also manuell aufrufen möchtest, musst du entsprechende Werte für Sender, aData und aBinding übergeben.
TUDPReadEvent = procedure (Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle) of object;
Allerdings wüsste ich jetzt nicht, warum du ein Lese-Event auslösen möchtest, wenn gar keine Daten gekommen sind. UDP ist ein verbindungsloses Protokoll, d.h. du hast keine Chance mitzubekommen ob ein Client noch online ist oder nicht. Die einzige Möglichkeit wäre ein Keep-Alive. Der Client müsste alle x Sekunden eine Nachricht senden. Hat dein Server von einem Client mehr als x+y Sekunden nichts empfangen ist dieser Client wohl nicht mehr online. |
Re: Indy 10 UDP Aktualisieren
Bist Du Dir sicher, dass das Sinn macht? Ansonsten musst Du das "On" weglassen und die Parameter mit dem richtigen Typ übergeben.
[edit] Zu spät :? [/edit] |
Re: Indy 10 UDP Aktualisieren
Hai STS301,
ich würde anders an das Problem herangehen. Dein Programm sendet beim Start ein UDP-Paket um sich bei anderen zu melden. Damit jetzt auch die "Versionen" die später gestartet wurden alle anderen kennen gibt es zwei möglichkeiten. a) Über einen Timer meldet sich jede Version alle X Sekunden b) Sobald das Programm gestartet wurde meldet es sich. Wenn diese Meldung dann auf einem anderen PC von dem Programm empfangen wurde antwortet es mit seiner eigenen Kennung. Frei nach dem Motto: Hallo ich bin da. Wer noch? |
Re: Indy 10 UDP Aktualisieren
danke für die tipps. :thumb:
da wird wohl die beste und einfachste Methode sein, dass sie X jede Y Sekunde meldet. in welchem Event soll ich es einfügen, dass es sich alle Y Sekunden melden soll. Derweil ist es im OnCreate aber sonst On Show oder wo? |
Re: Indy 10 UDP Aktualisieren
Du erstellst einen Timer mit einem entsprechenden Intervall. Immer wenn du etwas schickst setzt du vorher den Timer auf Enabled = False und nach dem Schicken auf Enabled = true. So kannst du verhindern, dass ein Keep-Alive gesendet wird, obwohl Nutzdaten übertragen werden.
|
Re: Indy 10 UDP Aktualisieren
danke euch :thumb: Ich schreibe es in den OnTimer Event rein
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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