Inet schmiert ab bei udp datenverkehr[gelöst]

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Hangman

Betreff: Inet schmiert ab bei udp datenverkehr[gelöst]

BeitragSa, Feb 27, 2010 13:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Moin blitzcom,
ich habe ein ziemlich blödes problem, ich schreibe zur zeit ein multiplayer game das über hamachi übers internet laufen soll.
Connection klappt alles soweit, sowohl client kann zu server als auch server zu client senden.
Connecten dann 2 Spieler zum Server schmiert die Internetverbindung auf Serverseite ab bis man das Serverprogramm ausschaltet.

Im Moment besteht sämtlicher Datenverkehr ausgenommen einloggen usw. nur aus Koordinatenübertragung:

Server Ausgang
Code: [AUSKLAPPEN]
;Sendet Koordinaten aller Spieler zu allen anderen Spielern auf der gleichen Map_ID
Function Send_Player_Stats()
   If MilliSecs()>Send_Player_Stats_Counter+40 Then
      Send_Player_Stats_Counter=MilliSecs()
      For Player1.Player = Each Player
         For Player2.Player = Each Player
            If Player1\Map_ID=Player2\Map_ID And Player1\ID<>Player2\ID Then
               ;with (Short)Send_Data1=Player_ID, (Int)Send_Data2=X, (Int)Send_Data3=Y, (Short)Send_Data4=Angle, (Byte)Send_Data5=Anim_Frame, (Short)Send_Data6=Life_Full, (Short)Send_Data7=Life, (Short)Send_Data8=Power_Full, (Short)Send_Data9=Power, (Byte)Send_Data10=Mech_Model
               WriteByte   Send_Stream, Update_Player_Pos
               WriteShort   Send_Stream, Player2\ID
               WriteInt   Send_Stream, Player2\X
               WriteInt   Send_Stream, Player2\Y
               WriteShort   Send_Stream, Player2\Angle
               WriteByte   Send_Stream, Player2\Anim_Frame
               WriteShort   Send_Stream, Player2\Life_Full
               WriteShort   Send_Stream, Player2\Life
               WriteShort   Send_Stream, Player2\Power_Full
               WriteShort   Send_Stream, Player2\Power
               WriteByte   Send_Stream, Player2\Mech_Model
               WriteByte   Send_Stream, Player2\Mech_Foot
               SendUDPMsg    Send_Stream, Player1\IP%, Server_Send_Port
            End If
         Next
      Next
   End If
End Function


Server Eingang
Code: [AUSKLAPPEN]
Case Update_Pos_Type
               ;with (Int)Send_Data1=X, (Int)Send_Data2=Y, (Short)Send_Data3=Angle, (Byte)Send_Data4=Anim_Frame, (Byte)Send_Data5=Mech_Foot
               Msg_Data1_Int%=ReadInt(Receive_Stream)
               Msg_Data2_Int%=ReadInt(Receive_Stream)
               Msg_Data3_Int%=ReadShort(Receive_Stream)
               Msg_Data4_Int%=ReadByte(Receive_Stream)
               Msg_Data5_Int%=ReadByte(Receive_Stream)
               For Player.Player = Each Player
                  If Send_IP=Player\IP Then
                     Player\X = Msg_Data1_Int
                     Player\Y = Msg_Data2_Int
                     Player\Angle = Msg_Data3_Int
                     Player\Anim_Frame = Msg_Data4_Int
                     Player\Mech_Foot = Msg_Data5_Int
                  End If
               Next



Client Ausgang
Code: [AUSKLAPPEN]
Function Send_my_Pos()
   If MilliSecs() > Send_my_Pos_Timer%+40 Then
      Send_my_pos_Timer% = MilliSecs()
      ;with (Int)Send_Data1=X, (Int)Send_Data2=Y, (Short)Send_Data3=Angle, (Byte)Send_Data4=Anim_Frame, (Byte)Send_Data5=Foot
      WriteByte Send_Stream, Update_Pos_Type
      WriteInt Send_Stream, Int(Main_X#)
      WriteInt Send_Stream, Int(Main_Y#)
      WriteShort Send_Stream, Player_Angle%
      WriteByte Send_Stream, Mech_Counter
      WriteByte Send_Stream, Foot
      SendUDPMsg    Send_Stream, Server_IP, Client_Send_Port
   End If
End Function





Client Eingang
Code: [AUSKLAPPEN]
Case Update_Player_Pos
            ;with (Short)Send_Data1=Player_ID, (Int)Send_Data2=X, (Int)Send_Data3=Y, (Short)Send_Data4=Angle, (Byte)Send_Data5=Anim_Frame, (Short)Send_Data6=Life_Full, (Short)Send_Data7=Life, (Short)Send_Data8=Power_Full, (Short)Send_Data9=Power, (Byte)Send_Data10=Mech_Model, (Byte)Send_Data11=Mech_Foot
            ;Update_Player_Stats(ID,X,Y,Angle,Anim_Frame,Life_Full,Life,Power_Full,Power,Mech_Model)
            Update_Player_Stats(ReadShort(Receive_Stream),ReadInt(Receive_Stream),ReadInt(Receive_Stream),ReadShort(Receive_Stream),ReadByte(Receive_Stream),ReadShort(Receive_Stream),ReadShort(Receive_Stream),ReadShort(Receive_Stream),ReadShort(Receive_Stream),ReadByte(Receive_Stream),ReadByte(Receive_Stream))

Code: [AUSKLAPPEN]
;Update_Player_Stats(ID,X,Y,Angle,Anim_Frame,Life_Full,Life,Power_Full,Power,Mech_Model)
Function Update_Player_Stats(F_ID%,F_X%,F_Y%,F_Angle%,F_Anim_Frame%,F_Life_Full%,F_Life%,F_Power_Full%,F_Power%,F_Mech_Model%,F_Mech_Foot%)
   Local Done_Cache=0
   For Player.Player = Each Player;Update existing player
      If Player\ID=F_ID Then
         Done_Cache=1
         Player\X         = F_X
         Player\Y         = F_Y
         Player\Angle      = F_Angle
         Player\Anim_Frame   = F_Anim_Frame
         Player\Life_Full   = F_Life_Full
         Player\Life         = F_Life
         Player\Power_Full   = F_Power_Full
         Player\Power      = F_Power
         Player\Mech_Model   = F_Mech_Model
         Player\Mech_Foot   = F_Mech_Foot
      End If
   Next
   If Done_Cache=0 Then;Create new player
      Player.Player = New Player
      Player\X         = F_X
      Player\Y         = F_Y
      Player\Angle      = F_Angle
      Player\Anim_Frame   = F_Anim_Frame
      Player\Life_Full   = F_Life_Full
      Player\Life         = F_Life
      Player\Power_Full   = F_Power_Full
      Player\Power      = F_Power
      Player\Mech_Model   = F_Mech_Model
      Player\Mech_Foot   = F_Mech_Foot
   End If
End Function


Da der Datenverkehr beispielsweise beim einloggen funktioniert kann ich es mir eigentlich nur durch ne endlosscheife beim senden erklären wenn alles so laufen würde wie ich es mir gedacht habe sollte es mit dem datenvolumen eigentlich keine probleme geben. Findet ihr einen Fehler?
Danke schonmal im vorraus

Edit: Am besten mal in bb kopieren das ist ja grausam mit den einrückungen hier zu lesen

Edit: Wie es das Schicksal so will die größten Probleme sind die kleinsten: Send_Player_Stats_Counter war nicht global deklariert.
Ich habe Berthold gebrochen.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group