Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy 10 UDP Aktualisieren (https://www.delphipraxis.net/115336-indy-10-udp-aktualisieren.html)

STS301 10. Jun 2008 15:27


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;

STS301 11. Jun 2008 16:46

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?

STS301 13. Jun 2008 08:57

Re: Indy 10 UDP Aktualisieren
 
habe es jetzt glaube ich geschafft (noch nicht ausprobiert)
Delphi-Quellcode:
IdUDPServer1.OnUDPRead
wenn es nicht klappen sollte melde ich mich wieder

STS301 17. Jun 2008 10:02

Re: Indy 10 UDP Aktualisieren
 
hi

Wenn ich das
Delphi-Quellcode:
userver.OnUDPRead;
starten will, dann sagt er:
Nicht genügend wirkliche Parameter!"

wie kann ich das lösen

Hilfe!

mquadrat 17. Jun 2008 10:11

Re: Indy 10 UDP Aktualisieren
 
Delphi-Quellcode:
TUDPReadEvent = procedure (Sender: TObject; AData: TIdBytes; ABinding: TIdSocketHandle) of object;
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.

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.

DeddyH 17. Jun 2008 10:13

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]

Sharky 17. Jun 2008 10:15

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?

STS301 17. Jun 2008 10:21

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?

mquadrat 17. Jun 2008 10:26

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.

STS301 17. Jun 2008 10:29

Re: Indy 10 UDP Aktualisieren
 
danke euch :thumb: Ich schreibe es in den OnTimer Event rein


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.
Seite 1 von 2  1 2      

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