AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Dienst. TCP/IP hat das Sicherheitslimit erreicht...
Thema durchsuchen
Ansicht
Themen-Optionen

Dienst. TCP/IP hat das Sicherheitslimit erreicht...

Ein Thema von Jackie1983 · begonnen am 3. Aug 2009 · letzter Beitrag vom 5. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 10:57
Servus,

diese Meldung kommt erst seit ich meinen Dienst installiert habe.
Zitat:
Ereignistyp: Warnung
Ereignisquelle: Tcpip
Ereigniskennung: 4226
Beschreibung:
TCP/IP hat das Sicherheitslimit erreicht, das für die Anzahl gleichzeitiger TCP-Verbindungsversuche festgelegt wurde.
Der Dienst versucht alle 100ms eine Verbindung zum Server aufzubauen.
Hier mal der Timer.
Delphi-Quellcode:
  //Noch Online?
  if not fClient.Active then begin
    Synchronize(SetClientOnline); //-> fClient.Active := true;
    //auf verbindung kurz warten
    while not fClient.Active do
    begin
      sleep(100);
      inc(i);
      if (i=10) or (fClient.Active) then break;
    end;
    if not fClient.Active then fClient.Active := false;
  end;
  //Jobs zum server senden
  if fClient.Active then
  begin
    //...
kann es sein das zu viele Verbindungen geöffnet werden und nicht richtig geschlossen, oder so?

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von FaTaLGuiLLoTiNe
FaTaLGuiLLoTiNe

Registriert seit: 3. Jul 2004
Ort: NRW
55 Beiträge
 
Delphi XE Enterprise
 
#2

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 11:05
Vielleicht solltest du für die Zeit der 'auf Verbindung kurz warten' - Schleife den Timer disablen, weil der sonst alle (circa) 100 ms anspringt und den Verbindungsaufbau neu anstösst, obwohl die Socket - Komponente gerade schon dabei ist, die Verbindung aufzubauen.
Christian
<< FaTaLGuiLLoTiNe >>
Rhinoceroses don't play games!
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#3

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 11:10
Servus,

Zitat von Jackie1983:
Hier mal der Timer.
Sieht aber nicht wie ein TTimer aus, was Du da machst.
Zitat von Jackie1983:

Delphi-Quellcode:
  //Noch Online?
  if not fClient.Active then begin
    Synchronize(SetClientOnline); //-> fClient.Active := true;
    //auf verbindung kurz warten
    while not fClient.Active do
    begin
      sleep(100);
      inc(i);
      if (i=10) or (fClient.Active) then break;
    end;
    if not fClient.Active then fClient.Active := false;
  end;
  //Jobs zum server senden
  if fClient.Active then
  begin
    //...
kann es sein das zu viele Verbindungen geöffnet werden und nicht richtig geschlossen, oder so?
Ja.
Vermutlich muesstest Du noch ein wenig mehr Code posten.
1.) wurde die var i initialisiert?
Wenn nicht startet sie bspw. bei 389198 und erreicht niemals 10

2.)
if not fClient.Active then fClient.Active := false;

Was soll dieses Statement. Wenn die Variable false ist wird sie auf false gesetzt????
Wenn man so etwas sieht, steht zu befuerchten, dass noch mehr Fehler im Code aussenherum sind.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 11:17
Zitat von Jackie1983:
      sleep(100);
Autsch. Da viele TCP/IP-Komponenten asynchron arbeiten haben diese keine Chance die verbindung aufzubauen. Du solltet dein Programm auf Event-Handling umbauen.



Und MS hate ein Grenze eingebaut um für Viren/Würmen die Verbreitungsgeschwindigkeit etwas zu trosseln so das diese nicht willt versuch nach Infektion gleich wieder hunderte PC's zu infizieren.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#5

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 11:25
Zitat von FaTaLGuiLLoTiNe:
Vielleicht solltest du für die Zeit der 'auf Verbindung kurz warten' - Schleife den Timer disablen, weil der sonst alle (circa) 100 ms anspringt und den Verbindungsaufbau neu anstösst, obwohl die Socket - Komponente gerade schon dabei ist, die Verbindung aufzubauen.
Aber wenn der Server nicht erreichbar ist soll der Client es ja wieder versuchen solange bis die Verbindung steht.

Zitat von mashutu:
Servus,
Sieht aber nicht wie ein TTimer aus, was Du da machst.
Es ist aber ein Timer.

Zitat von mashutu:
Vermutlich muesstest Du noch ein wenig mehr Code posten.
Das ist eigentlich der wichtige Teil, da wo die Verbindung aufgebaut wird.

Zitat von mashutu:
2.)
if not fClient.Active then fClient.Active := false;

Was soll dieses Statement. Wenn die Variable false ist wird sie auf false gesetzt????
Weil, wenn die Verbindung aufgebaut wird, so wie es FaTaLGuiLLoTiNe oben geschrieben hat, wollte ich damit die Verbindung komplett schließen so das im System auch nichts mehr ist, aber so ist es ja leider nicht.

Zitat von Bernhard Geyer:
Autsch. Da viele TCP/IP-Komponenten asynchron arbeiten haben diese keine Chance die verbindung aufzubauen. Du solltet dein Programm auf Event-Handling umbauen.
Da ich bis jetzt nur mit den Sockets so gearbeitet habe ohne das immer eine Verbindungen stehen muss, wei ich nicht wie man die Anwendung auf Event-Handling umbauen könnten, da brauche ich schon einen Denkanstoss.

Gruß
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.202 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 11:31
Zitat von Jackie1983:
Es ist aber ein Timer.
Synchronize deutet eher auf die Verwendung von Threads hin.

Zitat von Jackie1983:
Da ich bis jetzt nur mit den Sockets so gearbeitet habe ohne das immer eine Verbindungen stehen muss, wei ich nicht wie man die Anwendung auf Event-Handling umbauen könnten, da brauche ich schon einen Denkanstoss.
Du mußt die OnConnect/OnError/...-Eventhandler der Komponenten verwenden.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#7

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 11:35
Zitat von Bernhard Geyer:
Synchronize deutet eher auf die Verwendung von Threads hin.
Ein Thread mit einem Timer.

Zitat von Bernhard Geyer:
Du mußt die OnConnect/OnError/...-Eventhandler der Komponenten verwenden.
Lol ok, dachte jetzt die von Windows. Das sollte ich noch hinbekommen
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 12:42
Zitat:
Ein Thread mit einem Timer.
Also die TTimer-Komponente benötigt eine Nachrichtenschleife, damit diese ordnungsgemäß funktioniert. Eventuell liegt hier das Problem.
Zum Thema "Thread und TTimer" gibt es genug Threads im Forum.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#9

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 3. Aug 2009, 12:43
Zitat von quendolineDD:
Zitat:
Ein Thread mit einem Timer.
Also die TTimer-Komponente benötigt eine Nachrichtenschleife, damit diese ordnungsgemäß funktioniert. Eventuell liegt hier das Problem.
Zum Thema "Thread und TTimer" gibt es genug Threads im Forum.
Glaube nicht, da ich diese habe.
Delphi-Quellcode:
  while GetMessage(Msg, 0, 0, 0) do
    DispatchMessage(Msg)
  Mit Zitat antworten Zitat
MichaM

Registriert seit: 21. Mai 2009
2 Beiträge
 
#10

Re: Dienst. TCP/IP hat das Sicherheitslimit erreicht...

  Alt 4. Aug 2009, 18:55
Es ist absolut nicht notwendig im 100 ms-Takt die Verbindung
herstellen zu wollen. Wenn die Verbindung nicht hergestellt
werden kann dauert es mehrere (bei mir 20) Sekunden, bis es
eine Fehlermeldung gibt. Selbst auf dem lokalen Rechner ist
es noch eine Sekunde bis die Fehlermeldung kommt.

Wenn es klappt, dauert es auch einige 100 ms.

Also einmal anstossen, merken dass schon angestossen, freuen
wenn Connect hergestellt, sonst erst nach Fehlermeldung neuer
Versuch.

Von welchem Typ ist eigentlich fClient ?
Wenn es sich um TClientSocket handelt: Man kann das
active zwar setzen, aber wenn man es zurückliest
ist es erst dann TRUE, wenn die Verbindung hergestellt ist.

Gruss MichaM
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:25 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