UDP_Client geht nicht weis nicht Warum

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

xXThunderXx

Betreff: UDP_Client geht nicht weis nicht Warum

BeitragDo, Apr 09, 2009 19:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Leute hab mal experimentiert mit UDP wollte eig nen Client uns Server Schreiben jedoch tauchen beim Client porb auf und zwar wird mein empfangs_stream nicht er kannt. Ich weis aber nicht warum hab eigentlich alles Global und denke mal auch richtig gemacht hoffe ich zumindest.
Naja hir ist der code:
Client:
Code: [AUSKLAPPEN]
AppTitle "Client"


      
Graphics 800,600,16,2
SetBuffer BackBuffer()
timer = CreateTimer(90)





Type gegner
   Field x,y,ip,leben
End Type
      

host_ip$ = Input("Gebe bitte die IP des Host ein: ")    
host_ip_server = integer_ip(host_ip$)   
   
Global empfang_port = 9000
Global sende_port   = 9010      
Global mouse_x, mouse_y

      Global empfangs_stream = CreateUDPStream(empfang_port)
      Print  empfangs_stream   
      Global sende_stream    = CreateUDPStream(sende_port)
      Print  sende_stream   
Repeat
      

      
      
      mouse_x = MouseX()
      mouse_y = MouseY()
      
      Rect mouse_x,mouse_y,50,50
      
      
         empfangen()
         senden()
      
      
         For gegner.gegner = Each gegner
            Rect gegner\x,gegner\y,50,50
               Print "Gegner-x: " + gegner\x + "/Gegner-y: " + gegner\y + "/Leben: " + gegner\leben          
         Next
         
   Flip(0) : Cls
   WaitTimer(timer)
Until KeyHit(1)


Function empfangen()

Repeat
   nachricht = RecvUDPMsg(empfangs_stream)
   
      If nachricht <> 0 Then
         While Not Eof(empfangs_stream) ; bis kein packet mehr im Post fach ist
            ip = ReadInt(empfangs_stream)
               
               
               vorhanden = 0
               
            For gegner.gegner = Each gegner
                If gegner\ip = ip Then vorhande = 1 :  Exit
            Next
               
               
               If vorhanden = 0 Then
                  gegner.gegner = New gegner
                     gegner\ip = ip
               EndIf
               
                        
                        
                        Select ReadByte (empfangs_stream)
                           Case 1    
                              
                                 gegner\x     = ReadInt(empfangs_stream)
                                 gegner\y     = ReadInt(empfangs_stream)
                                 gegner\leben = ReadInt(empfangs_stream)
                        End Select
            Wend
         EndIf
      
Until nachricht = 0

 
End Function                   



Function senden()

   WriteByte sende_stream,1
   WriteInt sende_stream,mouse_X
   WriteInt sende_stream,mouse_y
   ;WriteInt sende_stream,gegner\leben
   ;WriteInt sende_stream,
      SendUDPMsg sende_stream,host_ip_server,sende
End Function




Function integer_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
                        


   




Hir mien Server:
Code: [AUSKLAPPEN]
AppTitle "Server"

Graphics 500,200,16,2
SetBuffer BackBuffer()
timer = CreateTimer(90)
Type gegner
   Field x,y,ip,leben
End Type

Type client
   Field ip
End Type


empfang_port = 9010
sende_port   = 9000


empfangs_stream = CreateUDPStream(empfang_port)
sende_stream   = CreateUDPStream(sende_port)



Repeat

Repeat

      
   nachricht = RecvUDPMsg(empfangs_stream)
      
      If nachricht <> 0 Then
            
         For client.client = Each client
            If client\ip = nachricht Then vorhande = 1 :Exit
         Next
            
            If vorhanden = 0 Then    
               client.client = New client
                        
                   client\ip = nachricht
                        
                     gegner.gegner = New gegner
                        
                        gegner\ip = nachricht
            EndIf
            
               For gegner.gegner = Each gegner
               
                  If gegner\ip = nachricht Then Exit
               
               Next
               
               While Not Eof(empfangs_stream)
                  
                  Select ReadByte(empfangs_stream)
                     
                     Case 1
                        
                        gegner\x = ReadInt(empfags_stream)
                        gegner\y = ReadInt(empfangs_stream)
                        gegner\leben = ReadInt(empfangs_stream)
                  End Select
               Wend
      EndIf
Until nachricht = 0



For client.client = Each client
   For gegner.gegner = Each gegner
   
      If    client\ip <> gegner\ip Then                          
               
         WriteInt sende_stream,client\ip
         WriteByte sende_stream,1
         WriteInt sende_stream,gegner\x
         WriteInt sende_stream,gegner\y
         WriteInt sende_stream,gegner\leben                  
      
      
            SendUDPMsg sende_stream,client\ip,sende
      EndIf
   Next
Next


For client.client = Each client
   Print "Client: " + client\ip + " ist verbunden"      
Next


Flip(0):Cls
WaitTimer(timer)
Until KeyHit(1)      
 

Starwar

BeitragDo, Apr 09, 2009 20:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
http://blitzbasic.com/codearcs...?code=2261
Es braucht immer nur einen Stream für lesen und schreiben!
Forensuche benutzen!
MFG
 

xXThunderXx

BeitragDo, Apr 09, 2009 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab noch mal ne Frage wenn ich mit WirteIn Daten in den stream schreibe halt zum versenden muss ich die diese dann auch wieder in der Reihenfolge wie ich sie reingalden habe wieder auslese oder ist das egal wierum ich sie auslese.

Tankbuster

BeitragFr, Apr 10, 2009 0:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Du musst nicht Wink

Aber es wäre sicherlich sinnvoll.

Wenn du in den Stream 2 Ints schreibst

Zitat:

WriteInt(stream,Int1)
WriteInt(stream,Int2)
SendUDPMsg .....


Dann wird der Erste, der in den Stream geschrieben wurde, auch als erstes ausgelesen:

Zitat:

Int1=ReadInt(stream)
Int2=ReadInt(stream)
Twitter
Download Jewel Snake!
Windows|Android

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group