Wie am besten Daten über UDP übertragen?
Übersicht

barratatorBetreff: Wie am besten Daten über UDP übertragen? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe zurzeit ein (hoffentlich) kleines Problem mit der Kommunikation per UDP. Mein Programm sieht so aus: Server - TCP-Server - UDP Stream zum empfangen von Daten - UDP Stream zum versenden von Daten Client A: - TCP Verbindung an den Server - UDP Stream zum empfangen von Daten - UDP Stream zum versenden von Daten Client B: - TCP Verbindung an den Server - UDP Stream zum empfangen von Daten - UDP Stream zum versenden von Daten -Über TCP werden die "wichtigen" Daten verschickt, die aufjedenfall ankommen müssen. -Über UDP werden die Daten verschickt, die sich x-mal pro Sekunde ändern (Koordinaten von Spielern, usw.) Im Abstand von 50ms sendet der Client A seine UDP-Daten über den Stream zum Server, welcher dies dann an Client B (C,D,E,...) weitergibt. Das Problem ist jedoch, dass sich alles "aufstaut" wie man es eigentlich nur von TCP kennt. D.h. Wenn ich bei Client A laufe wird alles anfangs in Echtzeit an B übertragen und gerendert, jedoch nach ein paar Sekunden gibt es eine verzögerung, bis alles schließlich x-Sekunden später erst ankommt. Was mache ich dort falsch? Ich bin komplett ratlos ![]() Danke im Vorraus und noch schöne Weihnachten und einen guten Rutsch ins neue Jahr ![]() Gruß Bastian |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wie wärs wenn du uns den Code zeigst der das Problem verursacht? Hellsehen können wir (noch?) nicht. ![]() |
||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
barratator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Danke für die Antwort ![]() Hier ist mal ein stark gekürzter Code: Server Code: [AUSKLAPPEN] udp1 = CreateUDPStream(1000) ; in udp2 = CreateUDPStream(1001) ; out ip = INT_IP2("127.0.0.1") Repeat If RecvUDPMsg(udp1) <> 0 Then x = ReadShort(udp1) y = ReadShort(udp1) WriteShort udp2,x WriteShort udp2,y SendUDPMsg udp2,ip,1003 EndIf Delay 5 Until KeyHit(1) Function INT_IP2(ip$) p1=Instr(ip$,"."):p2=Instr(ip$,".",p1+1):p3=Instr(ip$,".",p2+1) Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1)) End Function Client A Code: [AUSKLAPPEN] udp1 = CreateUDPStream(1002) ; out x = 200 y = 200 ms = MilliSecs() ip = INT_IP2("127.0.0.1") Graphics 800,600,0,2 SetBuffer BackBuffer() Repeat If MilliSecs()-ms => 50 Then WriteShort udp1,x WriteShort udp1,y SendUDPMsg udp1,ip,1000 EndIf If KeyDown(200) Then y=y-1 If KeyDown(208) Then y=y+1 If KeyDown(203) Then x=x-1 If KeyDown(205) Then x=x+1 Cls Plot x,y Flip Delay 5 Until KeyHit(1) Function INT_IP2(ip$) p1=Instr(ip$,"."):p2=Instr(ip$,".",p1+1):p3=Instr(ip$,".",p2+1) Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1)) End Function Client B Code: [AUSKLAPPEN] udp1 = CreateUDPStream(1003) ; in x = 0 y = 0 Graphics 800,600,0,2 SetBuffer BackBuffer() Repeat If RecvUDPMsg(udp1) <> 0 Then x = ReadShort(udp1) y = ReadShort(udp1) EndIf Cls Plot x,y Flip Delay 5 Until KeyHit(1) Ich habe bereits rausgefunden, dass alles besser läuft, wenn man Delay bei allen 3 höher setzt (ab 20 läuft alles zimlich gut), aber das würde den Ablauf vom Rest zimlich stören ![]() Danke für die Hilfe im vorraus ![]() Gruß Bastian |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lass am besten Delay ganz raus und nimm Timer.
CreateTimer ![]() ![]() ![]() |
||
barratator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ok ![]() Ich habe jetzt bei allen 3 Programmen einen Timer mit 50FPS eingerichtet...Es hat aber immernoch eine enorme verzögerung ![]() Gruß Bastian EDIT: Wär' es vielleicht sinnvoll,, dass der Client dem Server nur immer sagt, dass eine Taste gedrückt wurde (z.b. Nach-Links-Taste wurde gedrückt/losgelassen) und dass der Server dann alles berechnet und alles weitergibt? |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group