Ein UDP Problem. Gesendet aber nicht Empfangen [ERLEDIGT]
Übersicht

pabloBetreff: Ein UDP Problem. Gesendet aber nicht Empfangen [ERLEDIGT] |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hat sich erledigt, es gab nie ein Problem o.O. Keine Ahnung was da los war ![]() So, ich glaube das hier passt am besten in Beginners Corner, weil ich sicherlich nur einen absolut dummen Fehler gemacht habe, welcher sicher leicht auffindbar ist ![]() Wie auch immer, ich habe hier den ganzen Code gepostet, um auch sicherzustellen, dass keine wichtigen Teile fehlen, aber der Problemteil (meiner Meinung nach) ist hervorgehoben =). Und jetzt zum wichtigsten Teil: Die Beschreibung meines Problems. Also, es handelt es sich hier, wie bereits im Titel lesbar um ein Problem mit UDP. Die Daten werden zwar gesendet, kommen aber nicht an. Ich verstehe leider absolut gar nicht warum, Tests über hamachi sind jedenfalls fehlgeschlagen. Daher konnte ich das Problem auch nicht sonderlich weit eingrenzen, aber ich habe den Code doch ein wenig auskommentiert (obwohl das ja sonst selten bei mir der Fall ist *gg*) Code: [AUSKLAPPEN] ;################################################## Player Type, hier werden die Spieler gespeichert.... :A Type TPlayers Field X# Field Y# Field Rotation# Field Beschleunigung# Field Port Field IP End Type ;################################################## Ja, allgemeiner Grafikkram, Auflösung 800x600, 32 bit, Fenstermodus + Tformfilter 0 für die Drehung des Autos Graphics 800,600,32,2 TFormFilter 0 ;################################################## Öffnung des Lokalen UDP Streams Global Players.TPlayers Global OwnUDPStream = CreateUDPStream() ;################################################## Erstellung des Autos + Rotation. AutoImage = CreateImage(100,35) SetBuffer ImageBuffer(AutoImage) Color 255,255,255 Rect 0,0,200,200 Dim AutoImages(360) For Done=0 To 360 AutoImages(Done) = CopyImage(AutoImage) RotateImage AutoImages(Done), Done MidHandle AutoImages(Done) Next ;################################################## Ein lustig kariertes Hintergrundbild um zu sehen, dass man sich auch bewegt. Global HintergrundImage = CreateImage(8,8) SetBuffer ImageBuffer(HintergrundImage) Color 50,50,50 Line 0,0,8,8 Line 8,0,0,8 ;################################################## Selbsterklärend SetBuffer BackBuffer() ;################################################## Der eigene Spieler wird erstellt, IP = 50 habe ich genommen, damit Blitz erkennt, dass es sich hier um den eigenen Spieler handelt. 50, weil es eine tolle Zahl ist. Players = New TPlayers Players\X# = Rand(0,700) Players\Y# = Rand(0,500) Players\Rotation = Rand(0,350) Players\Port = UDPStreamPort(OwnUDPStream) Players\IP = 50 ;################################################## Kamerapositionen Global CameraX Global CameraY ;################################################## So, hier kommt die Steuerung, dabei wird zuerst nach dem eigenen Spieler gesucht (der, welcher die IP 50 hat, und dieser ist dann Steuerbar) Function PlayerControls() For Players = Each TPlayers If Players\IP = 50 Then Exit End If Next ;############################################## Players\X = (Players\X+((Players\Beschleunigung#/2)*Cos(Players\Rotation#))) Players\Y = (Players\Y+((Players\Beschleunigung#/2)*Sin(Players\Rotation#))) ;############################################## CameraX = Players\X CameraY = Players\Y ;############################################## If KeyDown(200) Then If Players\Beschleunigung# < -3.0 Then Players\Beschleunigung# = Players\Beschleunigung# + 1 End If Players\Beschleunigung# = Players\Beschleunigung# + 0.1 ElseIf KeyDown(208) Then If Players\Beschleunigung# > 3.0 Then Players\Beschleunigung# = Players\Beschleunigung# - 1 End If Players\Beschleunigung# = Players\Beschleunigung# - 0.1 EndIf ;############################################## RotationsFaktor# = Players\Beschleunigung#/5 If RotationsFaktor# > 5 Then Rotationsfaktor# = 5 End If If KeyDown(205) Then Players\Rotation = Players\Rotation#+RotationsFaktor# ElseIf KeyDown(203) Players\Rotation = Players\Rotation#-RotationsFaktor# End If ;############################################### If Players\Rotation# > 360 Then Players\Rotation# = 0 If Players\Rotation# < 0 Then Players\Rotation# = 360 ;############################################## If Players\Beschleunigung# > 0 Then Players\Beschleunigung# = Players\Beschleunigung# - 0.01 ElseIf Players\Beschleunigung# < 0 Then Players\Beschleunigung# = Players\Beschleunigung# + 0.01 End If ;############################################## End Function ;################################################## Hier werden alle Spieler gezeichnet Function DrawPlayers() For Players = Each TPlayers DrawImage(AutoImages(Players\Rotation),(Players\X-CameraX)+GraphicsWidth()/2, (Players\Y-CameraY)+GraphicsHeight()/2) Next End Function ;################################################## HIER MEIN VERDACHT. Naja, meine mehr oder weniger tolle Netzwerkfunktion. Die nicht Funktioniert. Function NetWorkData() ;########### Empfangen While 1 RemoteIP = RecvUDPMsg(OwnUDPStream) If RemoteIP = 0 Then Exit Else For Players = Each TPlayers If Players\IP = RemoteIP Then Success = 1 : Exit End If Next If Success = 0 Then Players = New TPlayers End If Players\X# = ReadFloat(OwnUDPStream) Players\Y# = ReadFloat(OwnUDPStream) Players\Rotation# = ReadFloat(OwnUDPStream) Players\IP = RemoteIP Players\Port = ReadInt(OwnUDPStream) End If Wend ;############################################## Senden For Players = Each TPlayers If Players\IP = 50 Then TempX# = Players\X# TempY# = Players\Y# TempRotation# = Players\Rotation# End If Next ;############################################## For Players = Each TPlayers If Players\IP <> 50 Then WriteFloat OwnUDPStream, TempX# WriteFloat OwnUDPStream, TempY# WriteFloat OwnUDPStream, TempRotation# WriteInt OwnUDPStream, UDPStreamPort(OwnUDPStream) SendUDPMsg OwnUDPStream, Players\IP, Players\Port End If Next ;############################################## End Function ;################################################## Aus Blitzbase geklaut, um eine String IP in eine Integer IP zu verwandeln. Function INT_IP(IP$) a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a3=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,".")) a4=Int(IP$) Return (a1 Shl 24) + (a2 Shl 16) + (a3 Shl 8 ) +a4 End Function ;################################################## Otherstuff umfasst die anzeige des Eigenen Ports und ein Joinmenü, wenn man leertaste drückt. Function OtherStuff() Color 255,255,255 Text 0,0,"Your Port: "+UDPStreamPort(OwnUDPStream) If KeyHit(57) Then Cls() Players = New TPlayers Players\IP = INT_IP(Input$("Remote IP:")) Players\Port = Input("Remote Port:") End If End Function ;################################################## Die Hauptschleife Repeat ;############################################## NetWorkData() TileImage HintergrundImage, -CameraX, -CameraY PlayerControls() DrawPlayers() OtherStuff() Flip 1 Cls() Until KeyHit(1) So, das war der Code. Mein Verdacht liegt wie bereits erkennbar in der Funktion NetworkData(). Woran es aber liegt weiß ich nicht. Die Daten werden zwar gesendet, kommen aber einfach nicht an! |
||
- Zuletzt bearbeitet von pablo am Di, Nov 27, 2007 23:15, insgesamt einmal bearbeitet
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mein Verdacht liegt darin, dass du TempX#, TempY# und Temprotation# erst in der For-Schleife deklarierst, was dazu führt, dass sie beim reinschreiben wieder neu definiert werden -> Wert = 0
Einfach vor der Schleife die Variablen lokal definieren und schauen, obs klappt. Die IP -> Integer-Funktion kannst du übrigens um eniges einfacher haben^^ Code: [AUSKLAPPEN] CountHostIPs( dottedipadress$ )
Return HostIP( 1 ) |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
pablo |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wie gesagt, das Problem hat irgendwie nie existiert, scheinbar lag das an Hamachi, dass die Daten nicht angekommen sind. Wurde jetzt aber gelöst, danke trotzdem ![]() |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group