UDP Problem, langsam ankommende Verbindung *gelöst*
Übersicht

![]() |
GearTechDEehemals 'KillerJo96'Betreff: UDP Problem, langsam ankommende Verbindung *gelöst* |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich habe mir endlich mal einen Ruck gegeben und mich wirklich sehr intensiv mit UDP beschäftigt. Da ich dieses Netzwerk Protokoll irgendwie nie verstanden hatte, fehlten in meinen Spielen immer die passenden Funktionen wie z.B. ein Multiplayer Modus etc. An einem Tag hatte ich einfach, irgendwas, was mir irgendwie den Mut verschafft hat, dass ich UDP auf Anhieb verstanden habe. Kurz darauf (ca. 10 min nach dem ich mir ein Tutorial angeschaut habe) habe ich einen kompletten Chat in UDP geschrieben ohne Fehler und alles. Seiddem kann ich UDP ![]() Naja zu meinem Problem: Ich habe es auch endlich geschafft das Grundgerüst einen Multiplayer Games zu programmieren, also mit Types jeden Client anlegen und dafür erstmal würfel erstellen lassen etc. jetzt lasse ich die koordinaten nur übertragen, wenn eine der bewegungstasten W,A,S oder D gedrückt wird. Ich hab mir gedacht das sonst unnötiger Traffic ansteht. Jedoch nach neuen nachrichten prüfe ich sofort in der Hauptschleife ohne eine bremse so zu sagen, das also jeden schleifendurchlauf geprüft wird ob eine neue UDP nachricht da ist... Trotz vielem nachdenken wie ich es besser machen könnte, hab ich trotzdem das problem, dass die übertragung wirklich sehr langsam von statte geht. wenn ich es über das internet mache, dauert es bestimmt 2-3 sekunden, bis der andere würfel sich bewegt. warum ist das so? kann ich das irgendwie beschleunigen? Ich hoffe jemand kennt ein paar antworten auf mein problem PS: Ich habe eine 13.000 er Leitung und aufm andren PC auch. sollte also eig. nicht daran liegen oder? |
||
Mit freundlichen Grüßen: GearTechDE |
- Zuletzt bearbeitet von GearTechDE am Fr, Dez 02, 2011 18:37, insgesamt einmal bearbeitet
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Code ist eine feine Sache, wenn du gezielte Hilfe haben willst.
Bei 13000 bits/sec sollte ein Byte eingentlich wie nichts durchflutschen. ZEVS |
||
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
hmm... ja das ist so ne sache.. ich weiß nie welchen teil ich am besten poste, und den ganzen teil wäre zu aufwändig, es sind mehrere includes und es wäre wahrscheinlich zu kompliziert | ||
Mit freundlichen Grüßen: GearTechDE |
![]() |
aMulSieger des Minimalist Compo 01/13 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könntest du probieren, ein sehr einfaches Programm zu schreiben, in welchem der "Fehler" auch auftritt?
Vielleicht ein simples Programm was sich mit einer anderen Intanz verbinden kann und beide je ein kleines Rechteck oder so bewegen können? Wenn es auch bei so etwas einfachem eine große Verzögerung gibt ließe sich dort das Problem unter Umständen deutlich einfacher finden. (Wenn es denn ein Code-technisches Problem ist.) |
||
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans! Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Moment mal...
Jeder Client besteht aus einem Würfel. Er meldet sich beim Server an, schickt seine Koordinaten, zeigt die anderen Clients an und passt auf, dass alle Pakete einmal ankommen. Ich stelle es mir schwierig vor, hier auf mehrere Dateien zu kommen, es seie denn, du hast eine Abneigung gegen Dateien mit mehr als 300 Zeilen. Aber auch dann kannst du die Includes für das Posten durch die Dateien ersetzen. Wenn du dir (was sehr sinnvoll ist) die Netzwerkfunktionen ausgelagert hast, dann reicht es diese zu posten. Gehe aber bitte sicher, dass der Fehler nicht außerhalb liegt (einfach DebugLog ![]() ZEVS |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also das ist ein Fehler der immer wieder auftritt. Und zwar, rufst du wahrscheinlich die RecvUDPMsg![]() BlitzBasic: [AUSKLAPPEN] While RecvUDPMsg( ) Und das jeden Schleifendurchgang. Denn Blitz speichert die empfangenen Daten in einer Liste zwischen, welche nach und nach ab gearbeitet wird. da die Programm NIE 100% Synchron laufen und auch noch sende-Zeit dazwischen liegt, sind die Nachrichten oft "im Verzug", also die Liste wird immer Länger. Lg |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich kriege ja alle pakete, es ist ja nicht das problem das welche verloren gehen... (glaub ich) das problem ist einfach, dass alle nachrichten viel zu spät ankommen... in der Haupschleife hab ich ne funktion UpdateNetwork().
Darin steht: If RecvUDPMsg(UDPStream) <> 0 Then Select Readbyte(UDPStream) Case Join etc.. end select End If Ich dachte, dass es so ist, dass ich den pc zu sehr damit belaste jeden schleifendurchlauf nach nachrichten zu gucken. aber das kann wenn ich mal so drüber nach denke auch nicht sein-.- vielleich t sende ich einfach zu viel.. BlitzBasic: [AUSKLAPPEN]
ist das vielleicht zu viel. weil auch dann wird jja ständig gesendet und das jeden schleifen durchlauf |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Siehe oben ![]() Lg |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Zitat: Siehe oben
hä?? ich habe habe doch das RecvUDPMsg in der hauptschleife? kann man 2 hauptschleifen machen oder was? |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann eine While![]() ZEVS |
||
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
ach und dann soll ich jetzt die Funktion UpdateNetwork die in der eigentlichen hauptschleife ist noch in die while schleife machen? in etwa so?
BlitzBasic: [AUSKLAPPEN]
|
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das hast du wieder was falsch verstanden ![]() Du sollst nur die Nachrichten abfrage in der Hauptschleife in eine Schleife setzten : BlitzBasic: [AUSKLAPPEN] Repeat ;Hauptschleife Das heißt, die While-Schleife läuft solange, bis keine Nachricht mehr da ist. Danach geht die Hauptschleife weiter. Lg |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Würde aber im Prinzip keinen Lag von 2-3 Sekunden auslösen, ausser sein Spiel läuft mit etwa einem FPS.
Meine Vermutung ist, dass du jeden Schleifendurchlauf Daten reinschaufelst. Es wäre auch gut zu wissen wie viele Daten es sind, und ob du einen Timer hast. MfG Zitat: Bei 13000 bits/sec sollte ein Byte eingentlich wie nichts durchflutschen.
Auch wenn ich vermute dass du dies nicht so gemeint hast, ist es eine gefährliche Aussage. Dies gibt die Bandbreite an, nicht die Geschwindigkeit. Und 13'000 bit/s sind ziemlich wenig, meinst du nicht etwa 13'000kBit/s bzw. 13 MBit/s? |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
ZEVS |
![]() Antworten mit Zitat ![]() |
---|---|---|
![]() ZEVS |
||
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Byte kommt im Prinzip immer gleich schnell durch, sofern die Bandbreite grösser als der Paket-Header plus das eine Byte als Inhalt ist.
Eine Internetanbindung mit einer höheren Bandbreite heisst nur, dass du mehr Bytes gleichzeitig reinschaufeln kannst, jedoch wird ein einzelnes Byte immer gleich schnell ankommen. Man könnte so ein Vergleich machen mit einer Röhre; je grösser der Durchmesser, desto mehr Wasser kannst du hineinschütten, aber der einzelne Wassertropfen wird nicht schneller wenn das Rohr grösser ist. MfG |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
kann ich es auch so machen?
BlitzBasic: [AUSKLAPPEN]
und in UpdateNetwork steht: BlitzBasic: [AUSKLAPPEN]
ist das so richtig? |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hast du einen Timer ( CreateTimer![]() ![]() |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja hab ich, und ehm ja ich hab es schon hinbekommen es funktioniert jetzt. Danke trotzdem für alle Antworten.
Aber ich habe noch eine Frage zu dem CreateTimer - WaitTimer, was bewirkt es eigentlich, hab nur mal gelesen das es ins programm sollte. und manche sagen dass ich noch ein flip oder so machen soll. klar das kenne ich aber manchmal steht da 1 oder auch 0 muss ich hier etwas von nehmen? |
||
Mit freundlichen Grüßen: GearTechDE |
![]() |
Propellator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Flip![]() Wenn du keinen Timer benutzt, bzw. VSync nicht an ist, läuft dein Programm mit der maximalen anzahl Frames, die es schafft. Da dies gut und gerne mal 200 FPS sein können, kannst du dir gerne ausrechnen wie viele Bytes dann in deine Verbindung geschaufelt werden. ![]() |
||
Propellator - Alles andere ist irrelephant.
Elefanten sind die Könige der Antarktis. |
![]() |
GearTechDEehemals 'KillerJo96' |
![]() Antworten mit Zitat ![]() |
---|---|---|
xD okey ich lese mich einfach noch ein bisschen in das ganze netzwerkzeugs rein. ich denke mal das krieg ich schon irgendwie geregelt. ich bin jetzt erstmal froh, dass bis jetzt alles so läuft wie es soll.. vielen Dank | ||
Mit freundlichen Grüßen: GearTechDE |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group