Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi [Indy] TCPServer.send(...) in 2 Threads gleichzeitig? (https://www.delphipraxis.net/26754-%5Bindy%5D-tcpserver-send-2-threads-gleichzeitig.html)

Tubos 28. Jul 2004 19:08


[Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
Hallo;

kann es bei den Indys ein Problem geben wenn zwei Threads gleichzeitig über dasselbe TCP-Server-Socket oder TCP-Client-Socket senden?

Oder regelt Indy das automatisch mit einem kritischen Abschnitt?

Wenn nicht, müsste ich wohl eine eigene send-Funktion erstellen...

Tubos

NeoLuxembourg 28. Jul 2004 21:19

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
Wie wärs mit versuchen ? :shock:

DataCool 29. Jul 2004 12:32

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
Hi,

mir ist da kein Fehler bekannt.
Der Server läuft ja sowieso multi-threaded, für jede Connection ein Thread.

Wenn Du jetzt im Client-Programm zwei Threads hast, die beide was zum gleichen Server senden sollen, würde ich das über eine Connection tun, bei verschiedenen Servern, mir jeweils vorherigem connect, würde ich dir zwei connections empfehlen.

supermuckl 29. Jul 2004 12:42

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
er schreibt aber mit 2 threads auf EINEN socket..

normal hat ja z.b. der server für JEDEN thread ein socket -> 2 T = 2 S

was hat das für einen sinn mit 2 Indy threads auf einen socket zu schreiben ? ( sofern es indy threads sind )

wenn du normale threads meinst und damit dann schreiben willst dann müsstest du die sache selber absichern mit criticalsections
da an dieser stelle indy keine eingebaute funktion hat wo das ausschliesst

DataCool 29. Jul 2004 12:48

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
@SupermuckeL:

Trotzdem crashed es nicht, wenn Du aus zwei normalen TThread-Objekten, in das gleiche Socket schreibst.

supermuckl 29. Jul 2004 12:50

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
hmm 100%ig ? auch nicht zur gleichen zeit? weil der socket is ja dem indy thread untergeordnet bzw steht alleine da *g*g schwer zu beschreiben wie ich das meine.. naja egal.. ich würde auch sagen.. versuchs mal ( penetrations app basteln und nen paar minuten rennen lassen :) )

Tubos 29. Jul 2004 17:33

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
Zitat:

Wie wärs mit versuchen ?
Habe hier kein Delphi, bin aber schon am Überlegen wie ich weitermache wenn ich wieder zuhause bin :)

Zitat:

er schreibt aber mit 2 threads auf EINEN socket..
normal hat ja z.b. der server für JEDEN thread ein socket -> 2 T = 2 S
Genau, das meine ich.

Zitat:

was hat das für einen sinn mit 2 Indy threads auf einen socket zu schreiben ?
Das weiß ich im Moment auch nicht so genau, kann auch nicht nachsehen weil ich den Source nicht hier habe :roll:

Zitat:

wenn du normale threads meinst und damit dann schreiben willst dann müsstest du die sache selber absichern mit criticalsections
da an dieser stelle indy keine eingebaute funktion hat wo das ausschliesst
Ok, thx!

Ich denke, ich werde das Ganze dann doch anders machen...

supermuckl 29. Jul 2004 22:33

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
kannst ja dein problem schildern.. was willst du realisieren.. vielleicht kann man das ganze auch einfacher lösen.. wenn wir halt wissen was du da bastelst :)

Tubos 30. Jul 2004 17:50

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
Ein Chat (hab das schonmal in nem anderen thread erklärt, LanMess).

Komme aber seehr langsam voran weil ich viele andere Dinge nebenbei mache.

Weil du sagst "einfacher lösen": Ich bin am Überlegen, ob ich nicht - wie Stefano bei LanMess - mit UDP arbeite.
Es gibt - anders als das Konzept, das ich in dem anderen Thread erklärt habe - keinen Server, die Client haben alle die IPs von den anderen gespeichert und schicken den Text per UDP an diese.
Das wäre meiner Meinung nach ziemlich stabil und nicht besonders schwer (irgendwann muss ich halt noch dahinterkommen, wie man TList verwendet ;) ).
Oder ich machs mir ganz einfach und verwende Broadcasts...aber nach Möglichkeit will ich die nur dort verwenden wo es anders nicht geht (z.B. beim Suchen von anderen Clients).

Will aber nicht zuviel sagen weil ich im Moment nicht daran arbeiten kann und nicht weiß wie schwer / einfach das wirklich ist.

Auf die ursprüngliche Frage in diesem Thread habe ich ja die Antwort.

Tubos 31. Jul 2004 16:11

Re: [Indy] TCPServer.send(...) in 2 Threads gleichzeitig?
 
Super, habe jetzt angefangen das Ganze mit UDP neu zu schreiben.
Jetzt weiß ich auch, wozu ich das konkret benötige dass 2 Threads gleichzeitig senden: Das OnRead-Ereignis beim UDP-Server wird ja in einem Thread ausgeführt.
Und bei einigen speziellen Nachrichten antworte ich sofort, wenn ich sie bekomme.

Schätze mal auch der UDP-Client ist nicht thread-sicher, oder?

Kann ich die send-Funktion des Clients so überschreiben, dass eine kritische Sektion betreten, die normale send-Funktion aufgerufen und die kritische Sektion wieder verlassen wird?
Oder muss die dann einen anderen Namen haben (z.B. "writeln")?

edit:
Habe die Lösung gefunden, sie heißt inherited.
Weiß jetzt nur nicht, wie ich die Komponente umändern kann...aber das ist ein anderes Thema, ich mach nen neuen Thread auf.


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