Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 11, 2025 03:39

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Alternative zu DirectPlay
BeitragVerfasst: Sa Jul 22, 2006 22:29 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Ich suche eine einfach zu verwendende Netzwerkklasse die folgendes bietet:
* Suche Server im LAN
* Es gehen keine Pakete verloren, und ein Paket kommt immer vollständig und unverändert an
* Falls möglich Plattformübergreifend
* Falls möglich eine Simple User/Spielverwaltung:
    ListGames() im Lan
    JoinGame(IP)
    OpenGame
    KickUser(UserID) wenn host
    SendPacket(UserID/Host/Alle,Buffer,Size)
    OnUserJoin(UserID)
    OnUserQuit(UserID)
    OnReceivePacket(From,Buffer,Size)
    wobei ein User seine ID behält, auch wenn andere User joinen/quitten


Besonders wichtig sind mir die ersten 2 Punkte, da sich diese über Sockets recht schwer implementieren lassen (Da können Pakete zerstückelt oder sogar mehrere miteinander verbunden empfangen werden)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 22, 2006 23:58 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
*kopfkratz* Kann Dir nicht ganz folgen. Die Kriterien, die Du aufstellst werden IMAO nicht erfüllt. Empfehlen würde ich SDL_NET, da man damit eine einfache Kapselung für Sockets hat, die zudem Plattform unabhängig sind. Wichtig ist hierbei jedoch, dass Du mit den elementaren Grundlagen der Netzwerkprogrammierung vertraut bist. Solltest Du diese Grundlagen nicht haben, wird es vermutlich ein wenig komplex sein. Das Session-Management selbst ist eigentlich einer der leichtesten Dinge. Viel problematischer ist es eigentlich das Projekt syncron zu halten und auf Fehler zu reagieren, die keine Netzwerkimplementation einem abnehmen kann: Der Verlust oder die starke zeitliche Verzögerung von Paketen. Ansätze um dies zu realisieren können unterschiedlich sein.

TCP garantiert (!), dass das Paket auch am Ziel ankommt, sofern keine Kommunikationsprobleme vorliegen. Es liegt lange zurück, dass ich mit DirectPlay gearbeiet habe, aber es würde mich schon stark wundern, wenn dieses sicherstellen würde, dass auch dann noch eine Verbindung zustande kommt. Je nach Situation ist der Einsatz von UDP oder TCP sinnvoll und Du mußt sicherstellen, dass ggf. bei einem Paketeverlust (bzw. dessen massive zeitliche Verzögerung) die Anwendung diesen Fehler versucht zu korrigieren... einfrieren des Spiels, hervorziehen des Spielers aus der Deckung oder vorhersagen. All dies sind die eigentlichen Probleme und mir ist keinerlei Lib bekannt, die diese Aufgaben für einen abnehmen könnten. ;)

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 24, 2006 08:56 
Offline
DGL Member
Benutzeravatar

Registriert: Di Sep 03, 2002 15:08
Beiträge: 662
Wohnort: Hamburg
Programmiersprache: Java, C# (,PhP)
Für eine einzelne Klasse sind das sehr viele Anforderungen. Zumal je nach Bereich auf UDP bzw TCP zurückgegriffen werden sollte.
Alle Daten die zwingend sicher ankommen müssen sollten mit TCP übertragen werden, alles andere kann man getrost mit UDP verschicken, allerdings sollte man dann wie Phobeus schon sagte dafür sorgen das im Falle von Paketverlusten dafür gesorgt wird das der Client entsprechend reagiert.

_________________
(\__/)
(='.'=)
(")_(")


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Jul 24, 2006 12:10 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Hab das ganze jetzt erstmal über die WinSock Komponenten implementiert. Enthält so halt bestimmt noch einen Haufen Bugs.
Wenn/Falls ich das Spiel auf Linux portiere wird hat ein SDL_Net Adapter geschrieben. Außerdem wäre könnte ich noch eine p2p Lösung implementieren statt alle Daten über den Host zu verteilen.

Auf UDP kann ich verzichten, da bei mir alle Pakete unverändert ankommen müssen, damit das Spiel synchron bleibt. Dass das Spiel auf ausbleibende Daten mit einfrieren und entsprechender Anzeige reagieren muss ist klar.

DirectPlay würde glaube ich alle genannten features bieten, da dürfte die Einarbeitszeit allerdings relativ groß sein, wenn ich nicht die Komponente von DelphiX nehme.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 28, 2006 21:31 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
WinSock ist vollständig kompatibel zu Unix-Sockets, du musst lediglich andere libs einbinden die Initialisierung von WinSock entfällt völlig. SDL_net ist somit absoluter Schwachsinn, es abstrahiert 3 Zeilen Win-abhängigen Init-Code und es fehlen wichtige Funktionen der direkten Socket-Programmierung.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jul 28, 2006 23:42 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
SDL unterstützt aber noch wesentlich mehr als Windows und Unix. Gewiss für einen Pascaler eher geringeren Interesses, aber das SDL sinnlos ist, würde ich keineswegs unterschreiben...

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 29, 2006 10:21 
Offline
DGL Member

Registriert: So Feb 19, 2006 23:46
Beiträge: 55
Welche Systeme unterstützt SDL_net denn noch? Mir ist da nur das alte Mac OS (nicht Max OS X, das auf Unix aufbaut) und BeOS bekannt, Support für diese veralteten, proprietären Betriebssysteme ist ein geringer Vorteil gegenüber gravierenden Nachteilen, wie dass TCP-Sockets nicht richtig ohne Timeout gepollt werden können.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 29, 2006 10:49 
Offline
Fels i.d. Brandung
Benutzeravatar

Registriert: Sa Mai 04, 2002 19:48
Beiträge: 3830
Wohnort: Tespe (nahe Hamburg)
Also ich für meinen Teil hatte bislang keinerlei solcher Probleme mit SDL_Net und halte auch alte properitäre Systeme für unterstützungswürdig. Insbesondere dann, wenn eine Lib künftig neue Plattformen unterstützen könnte. Immerhin soll sich ja auch mal die sichtbare Architektur von Plattformen ändern und diesem Problem widmet sich SDL selbst ja auch. Ich denke aber, dass all dies dem Fragesteller nicht weiterhilft. SDL_Net und die Socks sind zweifelsfreie eine gute Möglichkeit um Netzprogrammierung zu realisieren. Die persönlichen Präferenzen von Entwicklern wurde hier allerdings nicht erfragt, zumal beide Lösungen nicht den Anforderungen des Fragenden erfüllen.

_________________
"Light travels faster than sound. This is why some people appear bright, before you can hear them speak..."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jul 29, 2006 12:47 
Offline
DGL Member

Registriert: Di Jun 06, 2006 09:59
Beiträge: 474
Momentan habe ich es halt über die Delphi-Komponenten realisiert, läuft aber noch nicht ganz stabil. Gibt beim disconnect noch Fehler, die aber hoffentlich bald behoben sind. Später baue ich vllt noch ein Adapter von SDL_Net ein.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 17 Queries | GZIP : On ]