![]() |
Indy TCP Server nur max ~100mal instanziierbar ?
ich bekomme immer den fehler
--------------------------- Debugger Exception Notification --------------------------- Project Project1.exe raised exception class EThread with message 'Thread creation error: Für diesen Befehl ist nicht genügend Speicher verfügbar'. Process stopped. Use Step or Run to continue. --------------------------- OK Help --------------------------- wenn ich etwa 100 TIdTCPServer instanziieren will... die exception passiert immer in TidThread ( die von Indy benutzt wird ) hab schon versucht den stack zu vergrößern aber das brachte nix ( hat ja auch net so vield damit zu tun ;) hier bleibt der dinger stecken:
Delphi-Quellcode:
der code womit ich instanziiere:
constructor TIdThread.Create(ACreateSuspended: Boolean);
begin // Before inherited - inherited creates the actual thread and if not suspeded // will start before we initialize FStopped := ACreateSuspended; FLock := TCriticalSection.Create; inherited Create(ACreateSuspended); {$IFNDEF VCL6ORABOVE} if (ThreadID=0) then begin RaiseLastWin32Error; end; {$ENDIF} try // <---- ERROR IncThread(SELF); except end; end;
Delphi-Quellcode:
wie kann ich jetzt ca 65000 server auf verschiedenen ports instanziieren?
procedure TForm1.Button1Click(Sender: TObject);
var i:integer; server: Tidtcpserver; begin for i := 1 to 5000 do begin server := Tidtcpserver.Create(nil); server.DefaultPort := i; server.Onconnect := form1.IdTCPServer1connect; server.OnExecute := form1.IdTCPServer1Execute; server.ListenQueue := 1; // <- hat auch nix gebracht server.Active := true; end; end; oder geht das einfacher und ressourcensparender mit einer anderen componente ? |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
nachtrag: es sind genau 123 server die created werden.. der rest landet als exception im nirvana ;)
|
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Zitat:
hat nicht direkt etwas mit deiner Frage zu tun. Aber ist es absicht das Du die Ports von 1 aufwährts belegen möchtest? Da wirst Du so oder so Probleme bekommen! |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Und selbst wenn: Die Listen-Threads des Indy-Servers, mit er die Connections abhört sind nun mal, na ja, Threads. Und solche Threads verbrauchen Speicherplatz und Rechenleistung. Irgendwann wirds dem rechner zu viel und er lässt dich nicht mehr weitermachen.
BtW: Statt ALLE Ports zu nutzen, einig dich doch auf ein paar, z.B.: -11554 -235 -7856 -9987 ES GIBT VON MIR KEINE!!! GARANTIE, DASS DIESE PORTS AUCH WIRKLICH FREI SIND! |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Zitat:
|
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Na und wenn schon.
Dann nimmt man halt Port 80 her und hat auch gleich noch 'ne sichere Firewall :mrgreen: |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Was soll eigentlich der Schwachsinn so viele Server-Instanzen zu erzeugen ?
Gibt es dafür einen logischen Grund ? Willst Du damit einen Portscanner verwirklichen ? Gruß Data |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Für einen Portscanner braucht man aber nur eine Instanz, aber einen Client, und checkt einfach in einer Schleife alle Ports durch. Nein, der hat was anderes vor...
|
Re: Indy TCP Server nur max ~100mal instanziierbar ?
@Dax:
Deshalb frage ich ja :mrgreen: Konnte mir nicht vorstellen das er so einen Portscanner verwirklichen will. @Supermuckel: Raus mit der Sprache, was soll das Ganze ? |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
@DataCool: Ich schiesse mich an: was soll das ganze?
|
Re: Indy TCP Server nur max ~100mal instanziierbar ?
@Dax: Dummheit ? :mrgreen:
|
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Zitat:
|
Re: Indy TCP Server nur max ~100mal instanziierbar ?
lol cool data gibts auch hier und nicht nur auf der enterprise *freu*
also.. 1. an den threads selbst kanns wohl net liegen da ich nen delphi thread ( TThread ) z.b. 1000 mal zugleich instanziieren kann ohne ein bisschen viel speicher zu verbrauchen ! 2. nein kein portscanner.. 3. nein ich will auch net nur paar ports haben ich will alle ;) also um es kurz zu sagen ( sonst wird man ja nur immer belehrt wieso man so blöd ist und nich nur 10 ports benutzt.. ) man startet dieses programm auf einem pc wo hinter nem router mit NAT steht das prog macht ( bestenfalls ) auf allen freien ports einen server socket auf und listet auf ankommende connections wenn ich nun mit einem portscanner auf den router ( die internet anbindung ) checken würde und gleichzeitig irgendwie die messages von meinem programm abfangen könnte wo mir sagen auf welchem port ich durch NAT reingekommen bin dann weis ich welche ports geforwardet sind ;) ganz einfach ! ok man kann das auch klein bisschen anderst machen das der server nur 100 ports öffnet.. dann wieder 100 andere usw aber mal die grundsätzliche frage.. wo hängts bei dem scheiss teil ? die threads könnens nich sein das könnt ihr mir nich erzählen.. ich kann tausende threads aufmachen und z.b. in jedem thread wiederum n TidICMP instanziieren und nen multithreaded pinger bauen ! also wieso zum geier hat der kack so eine beschränkung drinne o_O *nixblick* :cheers: |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
Hi supermuckl,
ich denke schon das Dein Problem an den Threads liegt, denn jeder IdTCPServer ist dafür designd um Multi-Threaded viele Connections zu behandeln, d.h. das jede Serverinstanz ein gewissenheit Overhead benötigt; z.B. ist eine der privaten Variablen des IdTCPServers FThreads: TThreadList; ist und wenn Du den Constructor von TThreadList etwas näher anschaust wirst Du feststellen, das jede ThreadList widerrum FLock: TRTLCriticalSection; verwendet. Darum ist klar das Du 1000 TThread Instanzen nicht mit 1000 TIdTCPServer Instanzen vergleichen kannst, weil zusätzlich noch jeweils 1000 CriticalSections erzeugt werden; denn restlichen Overhead nicht mit betrachtet. Natürlich kannst Du auch 1000 TidICMP Instanzen erzeugen, weil da nicht der Overhead zur Threadverwaltung benötigt wird. Die Lösung deines Problems hast Du selber schon genannt: Einfach weniger Instanzen erzeugen und nach und nach alle Ports durchgehen. Zitat:
dann kommt jemand des Weges der die Arbeit als selbstverständlich hinnimmt und sie auch noch beschimpft ? |
Re: Indy TCP Server nur max ~100mal instanziierbar ?
nimm mal nich so wörtlich :)
@Dax: Dummheit ? <- *übersehenhab* :/ und unterstell mir mal net das ich die arbeit net würdige von nevrona ich weis das die indy komponenten die besten sind keine frage :) mir is klar das ein tidtcpserver mehrere threads verwalten kann usw.. aber das das dann gleich bei 123 instanzen ein limit haben muss is ja schon hart.. wenn ich da an den rest denke wo ich schon gemacht hab da is das *flach gesehen* n klacks ?! ok dann muss ich mal schauen ob ich was mit sockets erreichen kann ( mit einem thread je server oder komplett selbst gemacht ) da dürfte dann nichmehr soviel overhead drin stecken ^^ und wenn alle stricke reissen mach ich das mit wechselnden ports ( unschön aber tut ) wüsste jemand auf die schnelle was da am besten wäre als tcp server ? da gibts ja die fastnet teile von D6.. dann hab ich da noch die ICS componenten... dann noch die indy sockets.. jemand erfahrung was da am geeignetsten wäre ? :coder: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:00 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