Du bist nicht angemeldet.

Werbeanzeige

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 092

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

1

21.03.2010, 19:26

Netzwerk-Programmierung mit Winsock

Servus,

ich schreibe gerade an der Netzwerk-Klasse eines Online-Games, allerdings hab ich da ein Problem...

Ich arbeite mit Winsocke und hab einen Server auf den sich eine bestimmte Anzahl von Clienten connecten können (arbeite mit select())

Jetzt hab ich aber das Problem, dass der Client nur eine Antwort empfangen kann, wenn er selber etwas geschickt hat.

Jetzt soll der Client aber auch was von seiner Umgebung erfahren und nicht nur antworten auf seine Aktionen bekommen.

Daher die Frage: gibt es eine Möglichkeit mit Winsocket vom Server an alle Clienten Sachen zu schicken ohne das als Antwort zu tuen?
Weil ich glaub kaum, dass der Server das lange mitmacht, wenn alle Clienten ihn dauerhaft "zuspammen", weil ja etwas "passieren" könnte :/

Mir wäre eingefallen, dass der Server selber auch Client ist und an die Clienten, welche in dem falle ebenfalls Server sind, Sachen schicken. Aber funktioniert das überhaupt? und wie kann man das umsetzen?

EDIT: ach ja schreibe in C++ als Grundlage dient mir http://www.c-worker.ch

mfg
Task-Manager

BTW: ist ja ne menge Schreibarbeit, diese Netzwerk-klasse^^ gibts vtl. ne fertige Netzwerk-Klasse, über die ich einfach Strings zwischen Server und Clienten beliebig hin und her schicken kann? (in beide Richtungen ohne aufforderung)
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Gotbread

Alter Hase

Beiträge: 421

Wohnort: Kempen

Beruf: Student (Etechnik) + Hiwi

  • Private Nachricht senden

2

21.03.2010, 19:32

Re: Netzwerk-Programmierung mit Winsock

Zitat von »"Task-Manager"«

Servus


nabend :)

Zitat von »"Task-Manager"«


Jetzt hab ich aber das Problem, dass der Client nur eine Antwort empfangen kann, wenn er selber etwas geschickt hat.


wieso das? sobald die verbindung steht, kann jede seite wie sie lustig
ist, daten reinstopfen.

Zitat von »"Task-Manager"«


Daher die Frage: gibt es eine Möglichkeit mit Winsocket vom Server an alle Clienten Sachen zu schicken ohne das als Antwort zu tuen?
Weil ich glaub kaum, dass der Server das lange mitmacht, wenn alle Clienten ihn dauerhaft "zuspammen", weil ja etwas "passieren" könnte :/


der server sendet einfach alle X sekunden ein update-packet raus.

Zitat von »"Task-Manager"«


BTW: ist ja ne menge Schreibarbeit, diese Netzwerk-klasse^^ gibts vtl. ne fertige Netzwerk-Klasse, über die ich einfach Strings zwischen Server und Clienten beliebig hin und her schicken kann? (in beide Richtungen ohne aufforderung)


es gibt divere, besonders RakNet ist recht beliebt. aber viel schreibauf-
wand ist das nicht, es sei den du baust auf UDP auf.

normalerweise hast du auf beiden seiten einen socket, und wenn du
auf der einen seite ein "hallo" reintust, kommt dieses "hallo" auch auf
der anderen seite an. server und client gibt es nur während des
verbindungsaufbaus, danach kannst du in beide richtungen senden.
Mfg Goti
www.gotbread.bplaced.net
viele tolle spiele kostenlos, viele hardware-basteleien :)

"Es ist nicht undicht, es läuft über" - Homer Simpson

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 092

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

3

21.03.2010, 19:38

cool danke^^ ich arbeite erst seit heute mit Winsock, probier ich gleich mal aus :D

RakNet sieht ja auch vielversprechend aus, wenn ich mit Winsock nicht weiterkomme nutz ich einfach dies :lol:

mfg
Task-Manager
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Nox

Supermoderator

Beiträge: 5 274

Beruf: Student

  • Private Nachricht senden

4

21.03.2010, 22:37

Ich würde eher zu ENet oder IrrNetLite raten. RakNet weißt zwar unglaublich viele zusätzliche Gimmicks auf, aber der eigentliche Kern, das Senden und Empfangen von Daten, zeichnet sich nicht gerade durch niedrige Latenzen oder gar geringen Datenverkehr aus.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

Task-Manager

Alter Hase

  • »Task-Manager« ist der Autor dieses Themas

Beiträge: 1 092

Wohnort: am PC

Beruf: Student

  • Private Nachricht senden

5

22.03.2010, 00:23

Zitat von »"Nox"«

Ich würde eher zu ENet oder IrrNetLite raten. RakNet weißt zwar unglaublich viele zusätzliche Gimmicks auf, aber der eigentliche Kern, das Senden und Empfangen von Daten, zeichnet sich nicht gerade durch niedrige Latenzen oder gar geringen Datenverkehr aus.

Von RakNet krieg ich langsam Kopfrauchen^^ IrrNetLite scheint ziemlich cool zu sein, gibts irgendwo eine Ausführliche Schritt für Schritt Anleitung davon? (am besten auf Deutsch :D)
falls ichs i-wo vergessen hab:

mfg
Task-Manager

Rechtschreibfehler sind mein Eigentum und gewollt!

Nox

Supermoderator

Beiträge: 5 274

Beruf: Student

  • Private Nachricht senden

6

22.03.2010, 12:13

Da müsste ich genauso nach suchen wie du ;) . Versteh mich bitte nicht falsch; RakNet hat auch seine Vorteile, aber eben auch Nachteile, und das Prinzip bleibt eigentlich auch immer das gleiche. Wenn du die eine Lib verstanden hast, kannst du meist recht schnell in die anderen reinfinden.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

7

22.03.2010, 12:39

Wie wäre es mit der SFML?
Da arbeitest du mit Sockets hast aber eine schönen Abstrahierungslayer darüber

Tutorial 1

Tutorial 2

8

22.03.2010, 12:44

Hm, ich hab es selber nicht getestet, aber was ist mit asio?
http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html
Generell ist alles was von boost kommt ziemlich geil, aber man muss vielleicht noch gucken, ob asio für das konzipiert war, was du vor hast.
Lieber dumm fragen, als dumm bleiben!

Nox

Supermoderator

Beiträge: 5 274

Beruf: Student

  • Private Nachricht senden

9

22.03.2010, 14:22

ich glaube für einen Netzwerkanfänger ist es nicht sonderlich empfehlenswert direkt auf Socketebene zu arbeiten, egal in wiefern das abstrahiert wurde. Meist schlägt man sich mit dummen Kleinigkeiten rum, um am Ende etwas zusammen gefrickelt zu haben, was im Prinzip das gleiche macht wie RakNet, ENet etc. pp. Außer natürlich man will ein schon vorhandenes Protokoll implementieren aber auch dafür gibt es meist sehr gute fertige Lösungen.
Daher würde ich leuten die einfach einen MP o.ä. einbauen wollen, raten auf fertige Lösungen zurückzugreifen.
PRO Lernkurs "Wie benutze ich eine Doku richtig"!
CONTRA lasst mal die anderen machen!
networklibbenc - Netzwerklibs im Vergleich | syncsys - Netzwerk lib (MMO-ready) | Schleichfahrt Remake | Firegalaxy | Sammelsurium rund um FPGA&Co.

drakon

Supermoderator

Beiträge: 6 523

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

10

22.03.2010, 19:53

Zitat von »"Jonathan_Klein"«

Hm, ich hab es selber nicht getestet, aber was ist mit asio?
http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio.html
Generell ist alles was von boost kommt ziemlich geil, aber man muss vielleicht noch gucken, ob asio für das konzipiert war, was du vor hast.


Asio eignet sich nicht wirklich.
Ist imo zu kompliziert und eben, wie Nox sagt bietet es keine so hohe Abstraktion, wie RakNet oder ENet. Und vor allem ist asio nicht direkt für Spiele ausgelegt und daher würde ich schon etwas empfehlen, was extra für solche Anwendungen gebaut ist.

Werbeanzeige