Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Winsock: 1 Client mit mehreren Servern (https://www.delphipraxis.net/75033-winsock-1-client-mit-mehreren-servern.html)

Nogge 13. Aug 2006 09:51


Winsock: 1 Client mit mehreren Servern
 
Hallo Community!
Ich habe eine Server-Client-Klasse erfolgreich programmieren können, womit eine Verbindung zw. diesen möglich ist. Außerdem ist es möglich, mit mehreren Clients gleichzeitig auf den einen Server zu verbinden. Doch ich brauche meine Klasse nun für ein recht großes Projekt, ein Spiel, wo die Geschwindigkeit des Datenaustausches entscheidend ist.
Der eigene Client soll sich (im Multiplayer) bei allen Servern, d.h. bei allen anderen Spielern anmelden und diesen Daten senden. Dafür gibt es jetzt 2 für mich offensichtliche Möglichkeiten:

1. Der eine eigene Client connectet zu Server 1, schickt diesem Daten, disconnectet und führt diese Prozedur für jeden anderen Server (2,3,..) aus.

2. Es gibt mehrere eigene Clients; einen für jeden Server, mit dem ich mich verbinden möchte.

Letzteres hört sich natürlich am schnellsten an, ist aber von der Verwaltung her auch etwas schwieriger zu handhaben. Aber eigentlich erhoffe ich mir von diesem Thread, dass mir irgendeiner eine 3. (die optimale) Möglichkeit präsentieren kann :-)

Auf jeden Fall bräuchte ich euren Rat!
Viele Dank schon mal.
Nogge

cmrudolph 14. Aug 2006 20:56

Re: Winsock: 1 Client mit mehreren Servern
 
Hallo Nogge,
hast du mal über die Möglichkeit nachgedacht einfach udp zu verwenden?
Da sparst du dir das Connecten und Disconnecten, hast einen geringeren Overhead im Protokoll und kannst zB mit dem Indy UDP Clienten sehr einfach und schnell die Pakete direkt an den Rechner verschicken.
mfG, Christian

pszopp 14. Aug 2006 21:04

Re: Winsock: 1 Client mit mehreren Servern
 
Hi,

bei UDP muss man aber beachten, dass es verbindungslos ist,
und deswegen Pakete in falscher Reihenfolge ankommen können.
Spielt die Richtigkeit der Daten eine Rolle, dann sollte man lieber
bei TCP bleiben.

[edit]
Auf wie vielen Clients wird das Programm denn später laufen?
Und wie viele Server soll es geben?
[/edit]


Gruß,
pszopp

cmrudolph 14. Aug 2006 21:16

Re: Winsock: 1 Client mit mehreren Servern
 
Hallo,
eine Möglichkeit dem entgegenzukommen ist, dass man im UDP Paket einfach eine Sequenznummer mitsendet (wie es beim TCP auch gemacht wird) und dann einfach zu spät kommende Pakete ignoriert. Und da es natürlich vorkommen kann, dass man Pakete verliert kann man sicherheitshalber die Pakete mehrfach senden.
Wenn es nicht wirklich absolut auf die Geschwindigkeit ankommt ist TCP aber schon vorzuziehen.
Dann könntest du die Clienten einfach in einem Array dynamisch erstellen und jeweils zu einem Server verbinden. Das ist dann so ähnlich wie bei der alten TServerSocket Komponente, nur, dass du immer einen vollständigen Clienten und nicht nur den Socket im Array hast.
Eine weitere Möglichkeit mit mehreren TCP Clients zu arbeiten wäre direkt mit der WinAPI, wobei das eigentlich ein wenig dem Delphi Gedanken widerspricht, denke ich mal.
mfG, Christian

Nogge 18. Aug 2006 16:19

Re: Winsock: 1 Client mit mehreren Servern
 
Danke für euren Rat!
Ich habe auf keinen Fall vor, die Indy-Komponenten zu verwenden, da diese unglaublich viele sinnlose Eigenschaften und eine sehr große Komplexität aufweisen. Ich habe mir ja bereits die WinAPI für meine eigene Klasse benutzt und das soll auch so bleiben, da so die optimale Geschwindigkeit gewährleistet werden kann. Die WinAPI bietet wirklich nur die Basisbefehle, so dass keine unnütze Speicherbelastung zustande kommen kann.
Das 3D-Spiel soll später mit bis zu 16 Spieler ohne Probleme laufen, sodass ich mind. so viele Clients bzw. Server benötige. Ich benutze auf jeden Fall das TCP und melde mich in den nächsten Tagen mit neuen Ergebnissen bzw. Fragen noch mal :-)

Gruß Nogge


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