Netzwerk übertragung

Übersicht Sonstiges Smalltalk

Neue Antwort erstellen

kog

Betreff: Netzwerk übertragung

BeitragFr, Jul 03, 2009 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich machte mir letzen paar gedanken wegen der Netzwerk übertragung in UDP oder so.

Lösung 1:
Packet Erstellen (WriteByte und co)
Direkt absenden

Lösung 2:
Packet Erstellen (WriteByte und co)
Packet zu einer Liste hinzufügen
Alle Packete in der Liste am ende des Frames abschicken

Lösung 1 kann ja mal schnell zu einem Overflow an Daten kommen, da dann die Firewall des Clienten denkt, wäre eine Attacke und blockiert es.
Ist Lösung 2 daher gut oder kann es zu problemen bei der Übertragung kommen, wegen der geschwindigkeit?

mahe

BeitragFr, Jul 03, 2009 21:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest gar nicht so viel senden dass der Client denkt, es wäre eine Attacke.

Wenn Du die Möglichkeit hast ist ein eigener Thread für die Datenübertragung am praktischsten.
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,

kog

BeitragFr, Jul 03, 2009 21:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich mache vor kurzer Zeit mal ein Spiel mit vielen Gegnern...
Als ich die Daten gesendet hatte beim Login, bekam ein Freund die nicht, und die Firewall meldete eine Attacke.
Also wie löse ich es am besten, wenn mehrere Gegner unterwegs sind?

Tankbuster

BeitragFr, Jul 03, 2009 22:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du pro Frame 200 Pakete oder so losschickst, kommt das einer DDos Attacke schon ziemlich nah. Aber keine Angst, nach ein paar Sekunden wirst du dann kurzzeitig vom Internet getrennt.
(Auf jedenfall wenn du kontinuierlich übertrieben viele Daten rausschickst.)

Du musst ja nichtmal jedes Frame die Nachrichten absenden. Und nur alle absenden die wirklich gebraucht werden. Außerdem könntest du einfach deine normalen WriteByte, ect Befehle benutzen, und nur am Ende der Schleife ein SendUDPMsg verwenden.
Twitter
Download Jewel Snake!
Windows|Android

mahe

BeitragFr, Jul 03, 2009 22:40
Antworten mit Zitat
Benutzer-Profile anzeigen
kog hat Folgendes geschrieben:
Als ich die Daten gesendet hatte beim Login, bekam ein Freund die nicht, und die Firewall meldete eine Attacke.

Kann aber auch sein, dass er nur explizit den entsprechenden Port freigeben bzw. zuweisen müsste.

Auf jeden Fall immer so wenig wie möglich senden und lieber den Clienten selber mehr rechnen lassen.
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,

Tankbuster

BeitragFr, Jul 03, 2009 22:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim Login sendet man aber normalerweise nicht viele Daten. Das ist merkwürdig. Von einer Attacke kann doch erst dann die Rede sein, wenn man förmlich zugespamt wird.
Twitter
Download Jewel Snake!
Windows|Android

mpmxyz

BeitragFr, Jul 03, 2009 23:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Du solltest am Besten die Netzwerkübertragung nur zum Synchronisieren der Daten nutzen.
D.h. du lässt z.B. bei einem Shooter alle Spieler nur 2 bis 5 mal pro Sekunde abgleichen und den Rest berechnest du aus diesen Daten weiter.
Dies würde die Datenmenge erheblich senken.
Du solltest aber die Daten auch auf jeden Frame aufteilen.
Sonst könnten die zu großen Brocken das Programm kurzzeitig aufhalten und es würde ein paar mal pro Sekunde zu "Rucklern" kommen.
Du solltest auch eher, wenn du viele Daten auf einmal verschicken musst, wenige große statt viele kleine Pakete verschicken, da jedes Paket einen nicht zu unterschätzenden Header hat.
Optimal ist also ein Paket auf einmal.
Ich habe übrigens mit einem eigenen TCP-Datenübertragungsprogramm einige Erfahrungen mit der Paketgröße gemacht.
Dort hat das Anheben der Paketgrößen Wunder gewirkt.

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

kog

BeitragFr, Jul 03, 2009 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Demnach ist mein Lösungsatz 2 nicht schlecht?
Gut mache ich mich daran was Simples zu basteln.

Tankbuster

BeitragFr, Jul 03, 2009 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Nja so groß ist der Header jetzt auchnicht.
Ein UDP-Header ist 8 Bytes groß, was bei heutigen Leitungen nicht viel ausmacht, wenn man anstatt 1 mal 2 Pakete versendet. Dann kommt aber noch der IP4 Header dazu, der 20-60 Bytes lang ist.

Nicht zu verachten ist auch, dass das ganze dann noch durchs Netz geschickt werden muss, und dabei in jedem Netzwerk ein lokaler Ethernet Header (inkl. Präambel,ect) mitgesendet werden muss.
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group