Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Anonymous

unregistriert

21

07.04.2004, 21:02

Vor allem will ich darauf hinaus das das Protokoll keine Fehler duldet,bei dem geringsten Irrtum wird es nicht funktionieren.

Ein weitaus grösseres Problem wird allerdings die nachfolgende Fehlersuche sein,hier nutzt ein Debugger gar nichts,sondern du wirst jede einzelne Zeile deines Codes mit der obigen Seite vergleichen müssen um den Fehler zu finden.(Sehr sehr Zeitaufwendig ,ein wenig reicht da nicht.)

Anonymous

unregistriert

22

07.04.2004, 21:20

wozu hat am sein eigenes Netzwerk und ich arbeite seltenest mit dem Debugger. Das mit der Zeit stimmt habe schon 4 Tage lang von 15.00 bis 23.00 daran gearbeitet. Aber erstmal fahre ich für ne Woche nach London.

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

23

07.04.2004, 21:22

Nein, wie Linux schon sagte, keiner will demoralisieren, aber man sollte sich das nicht so einfach vorstellen. Wie:

Verbinde Server
Sende (xyz)
Empfange(etwas)

....

Es ist schon komplexer! ;)

Anonymous

unregistriert

24

07.04.2004, 21:36

klar englisch ist ja ach nicht nur "I am stupid". ALSO WIRKLICH haltet wir mich für ein so schlimmen Anfänger ? ALSO das demoralisiert mich :P .
Ne jetzt mal ehrlich, WAS soll daran so schwierig sein.Das syncronisieren?

25

07.04.2004, 22:16

WinSock macht es einem schon recht einfach Daten über das Netz zu versenden. Die Zerlegung der Daten in Packete, Fehlerkontrolle und das zusammenfügen der Packet auf der anderen Seite übernimmt das TCP Protokoll für einem.

Das größte Problem ist die Syncronisierung. Vor allem beim Internet da man da eine sehr hohe Latenszeit hat. Ist viel fummelei :)
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

26

07.04.2004, 22:25

jo, aber man muss ja das Rad nicht neu erfinden, es reicht schon wenn man ein wenig klaut ;D . Das mit der Latenz kann man ein wenig optimieren indem man das erstmal mit den Schätzwerten rendern(also wo das Schiff wahrscheinlich hinfliegt). Wenn dann die Werte eintrudeln kann man die Fehler korrigieren. ;)

Anonymous

unregistriert

27

08.04.2004, 15:57

Also ich habe das Gefühl, das man sich nicht so recht an die Multiplayer-funktion ran traut. Daher frage ich: Ist das so und wenn ja, wo seht ihr die Probleme? Erst dann können wir nämlich gemeinsam uns daran machen diese Problem zu lösen und dadurch den Thread endlich einen Sinn geben. Also ich bitte um viele Fragen.

28

08.04.2004, 16:52

TCP ist zwar einfacher, aber auch langsamer und daher nicht für den Transport von Daten während der Laufzeit geeignet. Die meisten Benutzen TCP für den Transport von Informationen vor dem Spiel. Also z.B. das Abfragen von vorhandenen Servern im Netz oder die Chat-Funktion. UDP wird aber meist dann benutzt wenn es um das In Game geht.

Bei UDP fängt es dann auch schon an. Zwar ist UDP schneller, aber auch nur deswegen weil es nicht so viel macht. Es ist also erst einmal notwendig eine Network Engine aufzubauen, die dafür sorgt das die Pakete für das versenden zerhackt, verschlüsselt und dann verschickt werden und auf der anderen Seite wieder zusammengesetzt und entschlüsselt werden.

Um Cheatern vorzubäugen werden die Daten meist immer verschlüsselt, das kann alles mögliche sein. Ein Reproduzierbarer Random Generator kann hier abhilfe schaffen. Die einzelnen Packete brauchen Nummern und eine Time ID damit sie auch wieder richtig zusammen gesetzt werden können und in der richtigen Reihenfolge verarbeitet werden können. Man baut sich mit UDP also ein eigenes Protokoll auf, was bei UDP auch ein Muss ist. UDP ist auch ein Verbindungsloses Protokoll. Sprich man sendet die Daten einfach ab, ob sie ankommen oder nicht muss man selber prüfen.

Neben der Syncronisation der Rechner, ist es auch nötig das Blocking Problem von WinSock bestmöglich zu lösen. Viele sagen man soll hier auf eine Thread Lösung zurückgreifen. Gibt es noch das Problem des versendens an sich. Selbst wenn man DSL hat, hat man in der Regel nur 128KBit's (16KB/s) für den Upload. Es ist also wichtig das die zu versendenden Daten sehr klein sind. Ausgehend von nur einem Spieler ist das nicht einmal so schlimm. Aber wenn man im Netz spielt, spielt man meist zu viert oder mehr.
Man kann zudem nicht jeden Frame Daten verschicken, das würde selbst jede DSL Verdindung sprengen. Bei einem Versand von <= 25FPS sollte ausreichend sein. Dann aber läuft das Spiel Asyncron zum Netzwerkverkehr.

UT hat für jedes Objekt eine Replication Klasse. Diese ist nur für den Netzwerkverkehr eines Objektes zuständig und ist stellvertrettent für z.B. den eigenen Spieler auf den anderen Rechnern. KA ob das die beste Lösung ist. Macht aber Sinn. Zumal hat man damit auch gleich die Daten geckapselt die man Verschicken muss damit die anderen die den eigenen Spieler darstellen können.

Ui....so das war erst einmal alles.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Anonymous

unregistriert

29

08.04.2004, 17:44

Ich habe ja nicht behaubte das man gleich einen Server progen kann um den einem Blizzard beneidet ;) . Und TCP/IP wird von vielen Spielen benutzt. Auch ist TCP/IP ein sehr weit entwickeltes Protokoll, so dass man nicht erwarten kann mit einer schnell dahin geschrieben UDP-Netzwerkengine viel schneller zu sein. Das Geschwindigkeit-Problem lösen viel Spiele so das sie immer in gewissen Abständen den kompletten Spielstand und dann einige Zeitlang nur die Veränderungen rüberschicken.
Mein Lösungsansatz:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
// Unser Protokoll
#define MSG_GLIST 1
#define MSG_SERV 2
#define MSG_NICK 3
#define MSG_GAMESTAT 4
#define MSG_WLOG 5
#define MSG_ULIST 6
#define MSG_TLIST 7
#define MSG_LDATA 8



void horen(void*);// MSG empfangen
void horen1(void*);
void annehmen(void*);//Clients aufnehmen
//************************************************************
class clients
{
public:
 int socketcli;
 void* ship;
 SOCKADDR adresse;
 char nick[20];//will mich nicht mir veriabelen längen aufhalten...

 clients();
 ~clients();
};

class server
{
public: 
    void sendMSG(int);
    server();
    ~server();  
    int socket1;
};

clients clientlist[32];

30

08.04.2004, 19:19

Ich wollte nur auf einige Probleme hinweisen, die zu bewältigen sind. So als Anregung für Fragen oder Lösungsansätze.
Wichtig! Ich übernehme keinerlei Verantwortung für eventl. Datenverlust oder Schäden am Rechner ;D

Werbeanzeige