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)
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..."
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.
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.
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.
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..."
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.
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..."
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.
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.