UDP_Server sendet nichts

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

xXThunderXx

Betreff: UDP_Server sendet nichts

BeitragMo, Apr 13, 2009 16:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,
Ich habe folgendes Problem. Die Clients holen sich von dem Server Medipackdaten die sie dann auswerten jedoch Sendet bzw. wird nichts empfangen. Woran könnte das liegen.

Senden(Server) [ein Teil davon]
Beim Sender hinzugefügt (Irgent wo dor muss da Problem liegen)
WriteInt udp_stream,medipack_x
WriteInt udp_stream,medipack_y

WriteInt udp_stream,medi(0)\aktiv


Code: [AUSKLAPPEN]
      ;senden
      For client.client = Each client
         For bomber.bomber = Each bomber
         bomber.bomber = First bomber
            If client\ip <> bomber\ip Then
         
               WriteInt udp_stream,client\ip
               WriteByte udp_stream,1
               WriteInt udp_stream,bomber\x
               WriteInt udp_stream,bomber\y
               WriteInt udp_stream,bomber\char_frame_alg
   
           
               For i =0 To 9
               WriteInt udp_stream,bomben_norm_gegner(i)\aktiv
               WriteInt udp_stream,bomben_norm_gegner(i)\x
               WriteInt udp_stream,bomben_norm_gegner(i)\y
               WriteInt udp_stream,bomben_norm_gegner(i)\explosion_lauft
               Next
               WriteInt udp_stream,bomber\schaden
                    WriteInt udp_stream,medipack_x
               WriteInt udp_stream,medipack_y
               
               WriteInt udp_stream,medi(0)\aktiv
      
                SendUDPMsg udp_stream,client\ip,8010
               EndIf
               




Empfänger(Client)


Code: [AUSKLAPPEN]
Function empfangen()

   Repeat
      
      nachricht = RecvUDPMsg(udp_stream)
      
         If nachricht <> 0 Then
            While Not Eof(udp_stream)
               ip = ReadInt(udp_stream)
               
               vorhanden = 0
               For bomber.bomber = Each bomber
                  If bomber\ip = ip Then vorhanden = 1 : Exit
               Next
               
               
               If vorhanden = 0 Then
                  bomber.bomber = New bomber
                  bomber\ip = ip
               EndIf
               
               
               Select ReadByte(udp_stream)
                  Case 1
               
                     
                     
                     bomber\x = ReadInt(udp_stream)
                     bomber\y = ReadInt(udp_stream)
                     bomber\char_frame_alg = ReadInt(udp_stream)
            
                     For i = 0 To 9
                     bomben_norm_gegner(i)\aktiv = ReadInt(udp_stream)
                     bomben_norm_gegner(i)\x = ReadInt(udp_stream)
                     bomben_norm_gegner(i)\y = ReadInt(udp_stream)
                     bomben_norm_gegner(i)\explosion_lauft = ReadInt(udp_stream)
                     Next
                     eigen_schaden  = ReadInt(udp_stream)
                     
                  
                                 medipack_x = ReadInt(udp_stream)
                     medipack_y = ReadInt(udp_stream)
                     medi(0)\aktiv = ReadInt(udp_stream)
                  
                End Select
            Wend
         EndIf
         
      Until nachricht = 0
      
End Function



beim Empfänger hinzugefügt (Irgent wo dor muss da Problem liegen)
medipack_x = ReadInt(udp_stream)
medipack_y = ReadInt(udp_stream)
medi(0)\aktiv = ReadInt(udp_stream)




Kompletter Server Code

Code: [AUSKLAPPEN]
AppTitle "Server"
SetBuffer BackBuffer()
timer  = CreateTimer(24)
SeedRnd MilliSecs()
Global start = MilliSecs
Global jetzt
Global mein_port = 8000
Global udp_stream= CreateUDPStream(mein_port)
Global medipack_x
Global medipack_y

Type client
   Field ip
End Type

Type bomber
   Field x
   Field y
   Field ip
   Field char_frame_alg
   Field schaden
End Type

Type bombe_norm_gegner
   Field x
   Field y
   Field aktiv
   Field explosion_lauft
End Type
Dim bomben_norm_gegner.bombe_norm_gegner(20)
For i = 0 To 20
   bomben_norm_gegner(i) = New bombe_norm_gegner
Next

Type medipack
   Field zeit
   Field aktiv
   Field aktiv_hinweis
   
End Type

Dim medi.medipack(1)
For i = 0 To 1   
   medi(i) = New medipack
   medi(i)\zeit = 30001
   medi(i)\aktiv = 0
   medi(i)\aktiv_hinweis = 1
Next

 
Repeat

jetzt = MilliSecs()

;Medipack


If medi(0)\zeit >= 30000 Then

standpunkt= Rand (1,5)


Select standpunkt

   Case 1
    medipack_x = 324
      medipack_y = 240
   
   Case 2
   medipack_x = 32 
    medipack_y = 32
   
   Case 3
   medipack_x = 608 
    medipack_y = 32
   
   Case 4
   medipack_x = 608
    medipack_y = 452
   
   Case 5
   medipack_x = 32
    medipack_y = 452
 End Select
   ;medipack()
   start = jetzt

      medi(0)\aktiv = 1
 
EndIf    

If medi(0)\aktiv_hinweis = 2 Then    medi(0)\aktiv = 0

Print "Hinweis: "+ medi(0)\aktiv_hinweis
      ;empfangen   
      Repeat
         nachricht = RecvUDPMsg(udp_stream)
         
         
         
         If nachricht <> 0 Then
            
            ;ob es den client gibt
            vorhanden = 0
            
         For client.client = Each client
            If client\ip = nachricht Then vorhanden = 1 : Exit
         Next
         
         
         If vorhanden = 0 Then
            client.client = New client
            client\ip = nachricht
            bomber.bomber = New bomber
            bomber\ip = nachricht
         EndIf
         
         
         For bomber.bomber = Each bomber
            If bomber\ip = nachricht Then Exit
         Next
         
         While Not Eof(udp_stream)
            Select ReadByte(udp_stream)
            
               Case 1
                  
                  bomber\x = ReadInt(udp_stream)
                  bomber\y = ReadInt(udp_stream)
                  bomber\char_frame_alg = ReadInt(udp_stream)
                  
               For bomber.bomber = Each bomber
               bomber.bomber = First bomber    
               If client\ip  = bomber\ip Then
                  For i = 0 To 9
                  bomben_norm_gegner(i)\aktiv = ReadInt(udp_stream)
                  bomben_norm_gegner(i)\x = ReadInt(udp_stream)
                  bomben_norm_gegner(i)\y = ReadInt(udp_stream)
                  bomben_norm_gegner(i)\explosion_lauft =ReadInt(udp_stream)
                  Next
                  bomber\schaden = ReadInt(udp_stream)
                  
               EndIf
                   
               
               bomber.bomber = Last bomber
               If client\ip =  bomber\ip Then
                  
                  For i = 10 To 19
                  bomben_norm_gegner(i)\aktiv = ReadInt(udp_stream)
                  bomben_norm_gegner(i)\x = ReadInt(udp_stream)
                  bomben_norm_gegner(i)\y = ReadInt(udp_stream)
                  bomben_norm_gegner(i)\explosion_lauft = ReadInt(udp_stream)
                  Next
                  bomber\schaden = ReadInt(udp_stream)      
                EndIf
            

                  bullshit = ReadInt(udp_stream)
               If bullshit = 2 Then
               medi(0)\aktiv_hinweis = bullshit
                              
               EndIf
 
            Next   
            End Select
         Wend
         EndIf
      Until nachricht = 0
      
      
      ;senden
      For client.client = Each client
         For bomber.bomber = Each bomber
         bomber.bomber = First bomber
            If client\ip <> bomber\ip Then
         
               WriteInt udp_stream,client\ip
               WriteByte udp_stream,1
               WriteInt udp_stream,bomber\x
               WriteInt udp_stream,bomber\y
               WriteInt udp_stream,bomber\char_frame_alg
   
           
               For i =0 To 9
               WriteInt udp_stream,bomben_norm_gegner(i)\aktiv
               WriteInt udp_stream,bomben_norm_gegner(i)\x
               WriteInt udp_stream,bomben_norm_gegner(i)\y
               WriteInt udp_stream,bomben_norm_gegner(i)\explosion_lauft
               Next
               WriteInt udp_stream,bomber\schaden
               WriteInt udp_stream,medipack_x
               WriteInt udp_stream,medipack_y
               
               WriteInt udp_stream,medi(0)\aktiv
      
                SendUDPMsg udp_stream,client\ip,8010
               EndIf
               Print "Schande anzeige: " + bomber\schaden
               
               bomber.bomber = Last bomber
               If client\ip <> bomber\ip Then
         
               WriteInt udp_stream,client\ip
               WriteByte udp_stream,1
               WriteInt udp_stream,bomber\x
               WriteInt udp_stream,bomber\y
               WriteInt udp_stream,bomber\char_frame_alg
   
           
               For i =10 To 19
               WriteInt udp_stream,bomben_norm_gegner(i)\aktiv
               WriteInt udp_stream,bomben_norm_gegner(i)\x
               WriteInt udp_stream,bomben_norm_gegner(i)\y
               WriteInt udp_stream,bomben_norm_gegner(i)\explosion_lauft
               Next
               WriteInt udp_stream,bomber\schaden
               WriteInt udp_stream,medipack_x
               WriteInt udp_stream,medipack_y

               WriteInt udp_stream,medi(0)\aktiv

               SendUDPMsg udp_stream,client\ip,8010
               EndIf 
               Print "Schande anzeige: " + bomber\schaden    
               Print "Standtort: "+medipack_x+ " " + medipack_y
               Print "Aktiv: " + medi(0)\aktiv
            Next
      Next       
      For client.client = Each client
         Print "Client: "+ client\ip +" ist verbunden"
         Print "gegner: " + bomben_norm_gegner(5)\aktiv
         Print "gegner: " + bomben_norm_gegner(15)\aktiv
         
   

         Print "Respawnmedi: " + medi(0)\zeit

      Next
      
      
   Flip(0):Cls
   WaitTimer(timer)

   medi(0)\zeit = zeit()
 
Until KeyHit(1) 




   



Function zeit()
zeit = jetzt - start + 1000
Return zeit
End Function
  • Zuletzt bearbeitet von xXThunderXx am Mo, Apr 13, 2009 16:25, insgesamt einmal bearbeitet

Pummelie

BeitragMo, Apr 13, 2009 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
hm versuch es doch mal mit tcp Smile
UDP klappt bei meinem neueren laptop zb auch nicht
It's done when it's done.
 

xXThunderXx

BeitragMo, Apr 13, 2009 16:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich empfang ja 90 % der Daten jedoch die letzten drei sachen die vom Server kommen werden nicht gesendet oder empfangen

Tankbuster

BeitragMo, Apr 13, 2009 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Natürlich. UDP klappt schon.

EDIT: sry, verlesen ^^
Twitter
Download Jewel Snake!
Windows|Android
 

xXThunderXx

BeitragMo, Apr 13, 2009 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Natürlich. UDP klappt schon. Ich hab den Code nur überflogen, und ein paar komische Sachen entdeckt.
Warum schreibst du z.B.

Zitat:
For i =0 To 9
WriteInt udp_stream,bomben_norm_gegner(i)\aktiv
WriteInt udp_stream,bomben_norm_gegner(i)\x
WriteInt udp_stream,bomben_norm_gegner(i)\y
WriteInt udp_stream,bomben_norm_gegner(i)\explosion_lauft
Next


Es reicht doch, wenn du das EINMAL in den Stream schreibst.


Das sind Daten die sich laufend verändern (Client-Server-Client) so zusagen die Position der gegnerischen Bombe.
 

xXThunderXx

BeitragMo, Apr 13, 2009 21:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Habs jetzt gelöst das Problem.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group