Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy]UDP schmiert nach ca. 8000 Sendungen ab (https://www.delphipraxis.net/81306-%5Bindy%5Dudp-schmiert-nach-ca-8000-sendungen-ab.html)

alzaimar 24. Nov 2006 14:30


[Indy]UDP schmiert nach ca. 8000 Sendungen ab
 
Hi Leute,

Ich muss zugeben, von LAN, IP etc. hab ich 0,1% Ahnung. Daher meine vermutlich richtig bescheuerte Frage:

Ich habe mal einen UDP-Client geschrieben, der an eine meiner anwendungen UDP-Pakete schickt. Damit meine Anwendung mal so richtig ins Schwitzen kommt, wollte ich einfach mal 10000000 :mrgreen: Pakete hintereinander schicken.

:wall: Nach ca. 8000 Paketen legt sich meine Testanwendung hin und meldet "10048 Socket in use" oder so.

Mit einem IP-Monitor sehe ich, das doch ne ganze Menge Ports auf 'time_wait' stehen, was immer das heißt. Zwar nicht 8000, aber so ca. 4000...

Wie schaffe ich das denn, das mir die TIdUDPClient-Komponente immer den gleichen lokalen Port nimmt, also mir den Testrechner nicht zumüllt?

So verschicke ich ein UDP-Telegram:

Delphi-Quellcode:
(*
Var
  UDP: TIdUDPClient; <--- UDP ist auf dem Formular als Komponente, der Timeout ist auf "-2"
*)
Begin
//  UDP := TidUDPClient.Create(Nil);
  Try
    UDP.Host := IP;
    UDP.Port := 12999;
    UDP.Active := True;
    UDP.Send(s); // <-- s ist der String (ach was)
    UDP.Active := False;
  Finally
//    udp.Free
  End;
End;

Der_Unwissende 25. Nov 2006 09:28

Re: [Indy]UDP schmiert nach ca. 8000 Sendungen ab
 
Zitat:

Zitat von alzaimar
Wie schaffe ich das denn, das mir die TIdUDPClient-Komponente immer den gleichen lokalen Port nimmt, also mir den Testrechner nicht zumüllt?

Hi, hoffe ich bin jetzt geistig auch im richtigen Thread :wink:
Mit Hilfe der Eigenschaft Binding.Port setzen, hier weißt du den lokalen Port zu, der verwendet wird. Die Eigenschaft Port hingegen wird für den Remote-Port verwendet. Ansonsten ist bei Indy noch wissenswert, dass du hier ein IdAntiFreeze verwenden solltest. Es sorgt dafür, dass die von Indy geöffneten Sockets einen eigenen Thread blockieren und nicht den Hauptthread des Programms.

Ist jetzt reine Spekulation, dass dein Problem hieraus resultiert, all zu weit ist auch mit meinen Kenntnissen nicht her auf dem Gebiet.

Gruß Der Unwissende

alzaimar 25. Nov 2006 11:42

Re: [Indy]UDP schmiert nach ca. 8000 Sendungen ab
 
Hi,

Hier bist Du richtig. :thumb:

Aha, ich werd mal die Bindings.Port-Eigenschaft auf einen festen Wert setzen, Danke.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:56 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