Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi gleichzeitiger Zugriff über Sockets (https://www.delphipraxis.net/2519-gleichzeitiger-zugriff-ueber-sockets.html)

Evilboyz 27. Jan 2003 15:25


gleichzeitiger Zugriff über Sockets
 
Hallo allerseits,

ich hab mal eine allgemeine Frage, auf die ich bisher noch keine zufriedenstellende Antwort bekommen habe.
Wenn ich einen Server programmiere, der über die Socket-Komponente Verbindungen annimmt, dann können ja grundsätzlich mal viele Clients gleichzeitig eine Verbindung herstellen.
Was passiert nun, wenn zwei Clients genau gleichzeitig auf den Server zugreifen, also den gleichen Socket nutzen möchten?
Meine Vermutung ist, dass dieser Fall kein Problem darstellt, weil jedesmal eine neue Instanz erzeugt wird, ist das richtig?

:wiejetzt:

Evilboyz 28. Jan 2003 09:28

Oder kann mir jemand sagen, wo ich solche Sachen nachlesen kann? Es ist ja doch wichtig, sowas zu berücksichtigen!

Christian Seehase 28. Jan 2003 11:51

Moin Evilboyz,

probiert habe ich's nicht, aber logisch wäre es, wenn in so einem Falle einer oder beide Clients einen Fehler zurückgemeldet bekommen (TClientSocket.OnError), dass die Verbindung fehlgeschlagen ist, und dann entsprechend erneut einen Verbindungsaufbau versuchen können/müssen.

chipie 22. Jan 2004 11:41

Re: gleichzeitiger Zugriff über Sockets
 
Ich denke, es hat bisher noch keiner Deine Frage gut beantworten können, da es wohl, sofern ich das Prinzip der Datenübertragung im Netzwerk richtig verstehe, nicht vorkommen kann, das 2 Datenpakete gleichzeitig eintreffen.
Denn du hast, wie ich annehme, nur eine Leitung, auf der die Daten herein kommen, und in dieser einen Leitung können natürlich nicht 2 Datenpakete nebeneinander übertragen werden, sondern immer nur hinter einander. Und selbst bei grossen Datenmengen werden ja nur viele kleine Datenpakete übertragen, und von deinem Rechner wieder zu großen Objekten zusammen gebaut.
Aber selbst wenn du 2 Leitungen hast, und irgendwie 2 Datenpakete ankommen, und diese auch noch von 2 Prozessoren gleichzeitig verarbeitet würden, selbst dann würde vor dem Listener nur ein Stack liegen, auf den diese Datenpackete gelegt werden, und da würde dann der Zufall entscheiden welches Paket zuerst ankommt.
Du siehst, wie man es auch wendet, die Datenpakete kommen nie gleichzeitig an, und du brauchst dir also um diesen einen Fall auch keine Sorgen zu machen *lächelt*

negaH 22. Jan 2004 12:56

Re: gleichzeitiger Zugriff über Sockets
 
Natürlich können viele Clienten zur gleichen Zeit auf den gleichen Server Port kommunizieren. Das Berkeley Socket API multiplext diese vielen Client Packete und Indy erzeugt für jeden verbundenen Client ja einen eigenen Thread zur Verfügung. Alles andere wäre ja auch Schwachsinnig, da ein Server sehr viele Clienten zur "gleichen" Zeit bedienen muß. Allerdings über die Internet-Verbindung kann zur gleichen Zeit immer nur EIN TCP/IP Packet von EINEM Clienten empfangen werden. Dies ist fakt. Das spielt aber keine Rolle das die Dest IP + Port + Source IP + Session ID des Packetes exakt angibt wohin es weitergeleitet werden soll.

Gruß Hagen

Vjay 22. Jan 2004 13:03

Re: gleichzeitiger Zugriff über Sockets
 
Also ich denke mal auch, es gibt ja nur einen Socket-Hauptthread, der auch wenn 2 Pakete gleichzeitig ankommen sollten (wie auch immer), die Unterthreads ja nur nacheinander erzeugen kann, also absolute Gleichzeitigkeit ist unmöglich.

negaH 22. Jan 2004 14:27

Re: gleichzeitiger Zugriff über Sockets
 
Die Client-Threads werden erzeugt wenn ein neuer Client versucht auf einem Port zu verbinden. Sie laufen solange bis die Client Verbindung getrennt wird. In der Lebenszeit eines Client Threads wartet er nun auf TCP/IP Packete die an ihn addressiert sind. Das heist aber auch das andere Clienten und deren Serverseitigen Threads in parallel warten, auf dem gleichen Serve Port, aber NICHT auf dem gleichen Socket ansich.

Gruß Hagen


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