AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Überarbeitung Netzwerkspiel
Thema durchsuchen
Ansicht
Themen-Optionen

Überarbeitung Netzwerkspiel

Ein Thema von Antigo · begonnen am 9. Mär 2007 · letzter Beitrag vom 10. Mär 2007
Antwort Antwort
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#1

Überarbeitung Netzwerkspiel

  Alt 9. Mär 2007, 15:26
Hi,
Ich habe zusammen mit ein paar Freunden ein Netzwerk Spiel geschrieben, was jetzt aber so verbuggt ist, dass wir es gerne noch einmal komplett neu entwickeln wollen. Knackpunkt ist hier jetzt erstmal die Kommunikation von Server und Clients. Bisher läuft das ganze so ab, das es einen Spielcounter gibt, anhand dessen Client und Server abgleichen können, ob es veränderungen gab.
Anfangs ist dieser Spielcounter 0 und bei jedem Zug, den ein Spieler ausführt wird er um eins erhöht.

Jeder Client fragt nun kontinuirlich nach ob es etwas neues gibt. Dazu schickt er seinen Spielcounter an den Server, dieser gleicht ihn mit dem aktuellen ab und schickt entweder zurück, dass es nichts neues gibt, oder aber die Veränderungen und den neuen Spielcounter.

Soweit das grundlegende Konzept, was auch funktioniert. Da wir das ganze bei der Neu entwicklung natürlich besser machen wollen, stellt sich hier die Frage, wie kann man den Overhead möglichst gering halten kann. 90% der Zeit wird nur sinnlos der Spielcounter geschickt und es kommt die Antwort das sich nichts getan hat. Es gibt bei dem Spiel halt sehr viel Freilauf, indem einfach nichts passiert (Vergleichbar mit Schach), trotzdem soll aber jeder Client so schnell wie möglich über Veränderungen informiert werden.
Es fehlt halt irgendwie die Möglichkeit vom Server aus Nachrichten an die Clients zu schicken.

Überlegt hatten wir jetzt schon, ob jeder Client auch einen ServerSocket aufmachen soll, damit der Server dann aktiv die Kommunikation anstoßen kann. Allerdings muss dann auf Client Seite auch eine Portfreigabe gegeben sein, was nicht so schön ist. Ausserdem muss der Server dann jede Menge Sockets und dementsprechend viele Ports verwalten. Auch sehr unschön.

Bisher hatten wir das ganze mit TClientsocket und TServerSocket gelöst. Hier haben wir dann per SendText die Informationen übermittelt.


Habt ihr vielleicht Tipps wie sich soetwas am effizientesten Lösen lässt? Ich bin mir sicher das diese Problemstellung öfters schon aufgetreten ist, ich konnte aber leider nichts passend finden. Sry dafür.


vielen dank aber auf jeden Fall schonmal

mfg
Antigo
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#2

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 16:07
niemand einen tipp? *push*
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 16:21
Hallo,

mal ne frage vorweg: Wieso sendet der Server nicht einfach an die Clients wenn sich was geändert hat?
So fragen die clients nicht ständig den Server ob sich was geändert hat
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#4

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 16:26
Zitat:
Überlegt hatten wir jetzt schon, ob jeder Client auch einen ServerSocket aufmachen soll, damit der Server dann aktiv die Kommunikation anstoßen kann. Allerdings muss dann auf Client Seite auch eine Portfreigabe gegeben sein, was nicht so schön ist. Ausserdem muss der Server dann jede Menge Sockets und dementsprechend viele Ports verwalten. Auch sehr unschön.
Was anderes wird dir glaube aber kaum übrig bleiben, wenn du über TCP arbeitest. Anders gänge es mit UDP, da es ein verbindungsloses Protokoll ist. Wie ist es damit?
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#5

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 16:49
Zitat von Helmi:
Hallo,

mal ne frage vorweg: Wieso sendet der Server nicht einfach an die Clients wenn sich was geändert hat?
So fragen die clients nicht ständig den Server ob sich was geändert hat
wie soll das gehen? Der Server kann meines Wissens doch nur antworten, nicht aber von sich aus etwas schicken?!
Zitat von Nuclear-Ping:
Zitat:
Überlegt hatten wir jetzt schon, ob jeder Client auch einen ServerSocket aufmachen soll, damit der Server dann aktiv die Kommunikation anstoßen kann. Allerdings muss dann auf Client Seite auch eine Portfreigabe gegeben sein, was nicht so schön ist. Ausserdem muss der Server dann jede Menge Sockets und dementsprechend viele Ports verwalten. Auch sehr unschön.
Was anderes wird dir glaube aber kaum übrig bleiben, wenn du über TCP arbeitest. Anders gänge es mit UDP, da es ein verbindungsloses Protokoll ist. Wie ist es damit?
An UDP hatte ich noch nicht gedacht. Ist das aber nicht eigtnlich veraltet?

Wie machen andere Netzwerkspiele das ganze denn?


PS: Danke für die Antworten
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.336 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 17:49
Hallo,

der ServerSocket kann so z. B. senden:
ServerSocket.Socket.Connections[Client].SendText(Text);
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#7

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 17:54
@Helmi, das geht tatsächlich, habs grad getestet
wenn wir das vorher gewusst hätten hätten wir uns eine Menge Arbeit sparen können... naja egal ^^

Gibt es zu dem ganzen ActiveConnections Kram ein vernünftiges Tutorial? Das ist mir noch nicht ganz geheuer.
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 18:25
Zitat von Antigo:
An UDP hatte ich noch nicht gedacht. Ist das aber nicht eigtnlich veraltet?

Wie machen andere Netzwerkspiele das ganze denn?
UDP ist nicht veraltet, TCP baut auf UDP auf. Nur beim TCP-Protokoll wird überprüft, ob auch das Gesendete ankommt. Bei simplen UDP *kann* es unter "umständen" zu dem unwahrscheinlichen Fall kommen, dass ein Paket verloren geht.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#9

Re: Überarbeitung Netzwerkspiel

  Alt 10. Mär 2007, 18:39
So unwahrscheinlich ist das aber nicht.

wenn du auf ner Lan bist wo ettliche leutchen Zocken. da ist so viel raffic im netz da geht das udp zeug andauernd verloren.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Antwort Antwort


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 07:39 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