Problem bei der Datenübertragung mit UDP
Übersicht

HeroxBetreff: Problem bei der Datenübertragung mit UDP |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Tag,
Hallo Leute ich bin erst neu hier und hab auch gleich ein Problem nähmlich habe ich vorgehabt mit Udp ein Einfaches Spiel zu erstellen indem man sich als eine Cube bewegt das Problem daran ist ich kann es Local Testen da funtioniert auch alles soweit aber wenn ich es I-Net Teste dann werden die Positionen nicht richtig zu den anderen Spielern übertragen aber obwohl der Server sie empfängt brauche bitte eure Hilfe währe sehr Dankbar. Hier ist mein Server: Code: [AUSKLAPPEN] AppTitle "Server" Graphics 240,60,16,2 SeedRnd MilliSecs() Global f_Time=CreateTimer(100) Global n_Stream=CreateUDPStream(8979); //Wenn nicht auf Localhost getestet wird dann diesen Port-UDP oeffnen. Const n_Connect=1 Const n_Leave=2 Const n_Position=3 Type n_User Field u_Name$ Field u_Ip$ Field u_Port Field u_X# Field u_Z# Field u_A# End Type Type n_Chat Field C_Msg End Type While Not KeyHit(1) WaitTimer(f_Time) If RecvUDPMsg(n_Stream) n_Ip$=UDPMsgIP(n_Stream) n_Port=UDPMsgPort(n_Stream) n_Type=ReadByte(n_Stream) Select n_Type Case n_Connect nU.n_User=New n_User u_Name$=ReadLine(n_Stream) nU\u_Name$=u_Name$ nU\u_Ip$=n_Ip$ nU\u_Port=n_Port For nU.n_User=Each n_User If Not nU\u_Port=n_Port WriteByte n_Stream,n_Connect WriteLine n_Stream,u_Name$ WriteByte n_Stream,n_Port SendUDPMsg n_Stream,nU\u_Ip$,nU\u_Port EndIf Next For nU.n_User=Each n_User If Not nU\u_Port=n_Port WriteByte n_Stream,n_Connect WriteLine n_Stream,nU\u_Name$ WriteByte n_Stream,nU\u_Port SendUDPMsg n_Stream,n_Ip$,n_Port EndIf Next DebugLog "Server: Connect -> "+u_Name$ Print "Server: Connect -> "+u_Name$ Case n_Leave For nU.n_User=Each n_User If Not nU\u_Port=n_Port WriteByte n_Stream,n_Leave WriteByte n_Stream,n_Port SendUDPMsg n_Stream,nU\u_Ip$,nU\u_Port Else DebugLog "Server: "+nU\u_Name$+" -> Leave" Print "Server: "+nU\u_Name$+" -> Leave" Delete nU EndIf Next Case n_Position For nU.n_User=Each n_User If nU\u_Port=n_Port nU\u_X#=ReadFloat(n_Stream) nU\u_Z#=ReadFloat(n_Stream) nU\u_A#=ReadFloat(n_Stream) Print "Server: "+nU\u_Name$+" -> Update" EndIf Next End Select EndIf If MilliSecs()-s_Time>10 For nU.n_User=Each n_User For nUn.n_User=Each n_User If nUn\u_Port<>nU\u_Port WriteByte n_Stream,n_Position WriteByte n_Stream,nU\u_Port WriteFloat n_Stream,nU\u_X# WriteFloat n_Stream,nU\u_Z# WriteFloat n_Stream,nU\u_A# SendUDPMsg n_Stream,nU\u_Ip$,nUn\u_Port End If Next Next s_Time=MilliSecs() End If Flip 0 Wend Und nun mein Client: Code: [AUSKLAPPEN] AppTitle "Client" Graphics3D 640,480,32,2 SeedRnd MilliSecs() Global f_Time=CreateTimer(111) Global n_Stream=CreateUDPStream(Rand(5999,9111)) Global n_Port=UDPStreamPort(n_Stream) Global s_Ip$=HostIP(CountHostIPs("127.0.0.1")); // Oder die I-Net Ip auf diese der Client Connect soll. Global s_Port=8979 Const n_Connect=1 Const n_Leave=2 Const n_Position=3 Type n_User Field U_Name$ Field U_Port Field u_Entity% Field u_X# Field u_Z# Field u_A# End Type Type n_Chat Field C_Msg End Type n_Name$=Input("Username : ") WriteByte n_Stream,n_Connect WriteLine n_Stream,n_Name$ SendUDPMsg n_Stream,s_Ip$,s_Port cPiv=CreatePivot() Cube=CreateCube(cPiv) PositionEntity Cube,0,1,0 EntityColor Cube,Rand(20,255),Rand(20,255),Rand(20,255) Camera=CreateCamera(Cube) PositionEntity Camera,0,5,-6 RotateEntity Camera,30,0,0 FcB_Red=Rand(0,255) FcB_Green=Rand(0,255) FcB_Blue=Rand(0,255) CameraClsColor Camera,FcB_Red,FcB_Green,FcB_Blue CameraFogMode Camera,1 CameraFogColor Camera,FcB_Red,FcB_Green,FcB_Blue CameraFogRange Camera,0.1,100 Plane=CreatePlane() Gitter=LoadTexture("Media\Gitter.bmp",2) EntityTexture Plane,Gitter EntityFX Plane,1 While Not KeyHit(1) WaitTimer(f_Time) Cls If RecvUDPMsg(n_Stream) n_Type=ReadByte(n_Stream) Select n_Type Case n_Connect nU.n_User=New n_User nU\u_Name$=ReadLine(n_Stream) nU\u_Port=ReadByte(n_Stream) nU\u_Entity%=CreateCube() PositionEntity nU\u_Entity%,0,1,0 EntityColor nU\u_Entity%,Rand(0,255),Rand(0,255),Rand(0,255) Case n_Leave For nU.n_User=Each n_User If nU\u_Port=ReadByte(n_Stream) FreeEntity nU\u_Entity% Delete nU EndIf Next Case n_Position For nU.n_User=Each n_User If nU\u_Port=ReadByte(n_Stream) nU\u_X#=ReadFloat(n_Stream) nU\u_Z#=ReadFloat(n_Stream) nU\u_A#=ReadFloat(n_Stream) EndIf Next End Select EndIf If KeyDown(200) Then MoveEntity cPiv,0,0,.2 If KeyDown(208) Then MoveEntity cPiv,0,0,-.2 If KeyDown(203) Then TurnEntity cPiv,0,1.8,0 If KeyDown(205) Then TurnEntity cPiv,0,-1.8,0 If MilliSecs( )-s_Time>10 WriteByte n_Stream,n_Position WriteFloat n_Stream,EntityX#(cPiv) WriteFloat n_Stream,EntityZ#(cPiv) WriteFloat n_Stream,EntityYaw#(cPiv) SendUDPMsg n_Stream,s_Ip$,s_Port s_Time=MilliSecs() EndIf For nU.n_User=Each n_User If EntityInView(nU\u_Entity%,Camera) CameraProject(Camera,nU\u_X#,0,nU\u_Z#) PositionEntity nU\u_Entity%,nU\u_X#,1,nU\u_Z# RotateEntity nU\u_Entity%,0,nU\u_A#,0 EndIf Next RenderWorld() UpdateWorld() For nU.n_User=Each n_User If EntityInView(nU\u_Entity%,Camera) CameraProject(Camera,nU\u_X#,0,nU\u_Z#) Color 255,255,255 Rect ProjectedX#()-10,ProjectedY#()-40,80,14,1 Color 0,0,0 Text ProjectedX#()-10,ProjectedY#()-40,nU\u_Name$ EndIf Next Flip 0 Wend WriteByte n_Stream,n_Leave SendUDPMsg n_Stream,s_Ip$,s_Port Die Datei Gitter.bmp gibt es hier (Erstellt das Verzeichnis Media und tuht in dieses die Datei): ![]() Bitte helft mir da ich nicht weis woran es liegen könnte da es bei localhost ohne Probleme geht. Ich entschuldige mich für die Rechtschreibfehler! Vielen Dank schonmal für die Hilfen ! |
||
SYSTEMINFO: AMD Phenom 9850 Quad-Core Processor 2500 MHz||4 GB RAM ||MAINBOARD: ASUSTek M3N78-EM|| GRAFIK: NVIDIA GeForce 9600 GT
|| SERVER-HOMEPAGE: http://gamerxl.de/ [IM AUFBAU] |
- Zuletzt bearbeitet von Herox am Mi, Jun 03, 2009 18:30, insgesamt einmal bearbeitet
![]() |
Starwar |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Du solltest für Dateien TCP verwenden, da sonst Daten verloren gehen können. Noch wetwas Standardlektüre: http://blitzbasic.com/codearcs...?code=2263 http://blitzbasic.com/codearcs...?code=2261 MFG |
||
Herox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich verwende deshalb UDP da dies die schnellere Variante ist und TCP ist zu langsarm es gehen zwar keine Daten bei TCP verloren aber für die übertragung der Position würde es das Programm zu stark bremsen.
Udp kann die Daten schneller versenden deswegen verwende ich es für die Position. Eigentlich verzweifel ich da es beim Testen über Localhost funktioniert aber über INet nicht. Server erhält die Daten aber die anderen Clients erhalten sie nicht richtig.Und ich weiß nicht woran das Liegt. Wenn ein Spieler Verbindung zum Server aufbaut funktioniert es ja auch . Aber wen man sich bewegt bemerken die anderen Clients das nicht wenn man nicht Local testet. Freue mich für weiter Hilfen zu diesem Problem und bedanke mich schonmal jetzt! |
||
SYSTEMINFO: AMD Phenom 9850 Quad-Core Processor 2500 MHz||4 GB RAM ||MAINBOARD: ASUSTek M3N78-EM|| GRAFIK: NVIDIA GeForce 9600 GT
|| SERVER-HOMEPAGE: http://gamerxl.de/ [IM AUFBAU] |
- Zuletzt bearbeitet von Herox am Mi, Jun 03, 2009 18:31, insgesamt einmal bearbeitet
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Vom Servercode: Code: [AUSKLAPPEN] SendUDPMsg n_Stream,nU\u_Ip$,nUn\u_Port
Müsstest du die Nachricht nicht eher an nUn\u_IP$ schicken? btw: Ich empfehle dir, übersichtlichere Variablennamen anzugewöhnen ![]() mfG |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
Herox |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Oh ja stimmt war mir wohl ein kleiner fehler unterlaufen.
Vielen Dank Holzchopf! |
||
SYSTEMINFO: AMD Phenom 9850 Quad-Core Processor 2500 MHz||4 GB RAM ||MAINBOARD: ASUSTek M3N78-EM|| GRAFIK: NVIDIA GeForce 9600 GT
|| SERVER-HOMEPAGE: http://gamerxl.de/ [IM AUFBAU] |
- Zuletzt bearbeitet von Herox am Mi, Jun 03, 2009 18:31, insgesamt einmal bearbeitet
![]() |
Tankbuster |
![]() Antworten mit Zitat ![]() |
---|---|---|
Aber die IP muss im Integer-Format sein, also ein String wie "217.32.2.88" geht natürlich nicht. Nurmal so als Info wegen Zitat: SendUDPMsg n_Stream,nU\u_Ip$,nUn\u_Port
|
||
Twitter
Download Jewel Snake! Windows|Android |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group