UDP Problem

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Mathias-Kwiatkowski

Betreff: UDP Problem

BeitragMi, Okt 03, 2007 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
hi, ich habe hier ein udp problem, zuerst habe ich die spielerdaten so gesendet, wenn man sich bewegt hat, aber das ging leider nicht, nun sende ich diese nach einigen millisecs, und es funktioniert immernoch nicht, aber eine UDP verbindung kommt zustande. seht selber, vll weiss ja jemand einen rat.

ich brauche dies für ein weltraumshooter, was im netzwerk funktionieren soll.

CLIENT:
Code: [AUSKLAPPEN]
Graphics 800,600,32,2

   n = CountHostIPs("localhost")
   host_ip = HostIP(1)
   ipaddress$ = DottedIP$(host_ip)
   wtimer=CreateTimer(100)
   UDPTimeouts 9
   udp=CreateUDPStream(  )


Global name$=Input$("Name:")
WriteLine udp,"1|"+name$+"|"
WriteInt udp,MilliSecs()
SendUDPMsg udp,host_ip,2011

Global PlayerX, PlayerY, sekunde, timer

Global player.player
Type player
Field name$
Field x,y
End Type


Repeat
   Cls
   Color 255,0,0
   Rect PlayerX,Playery,16,16

   Color 128,0,0
   For player.player=Each player
      Text player\x,player\y,player\name$
   Next

    ip=RecvUDPMsg( udp )
  ; If Eof( udp )<0 RuntimeError "RecvUDPMsg failed"
   
   If ip

;      linin$=ReadLine$( udp )
gesamt_byte_anzahl = ReadAvail(udp)
Print gesamt_byte_anzahl

      Menu=Int(Mid(linin$,1,Instr(linin$,"|",1)))
      linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1))
      If menu=1 Then
         x=Int(Mid(linin$,1,Instr(linin$,"|",1)-1))
         linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1))
         y=Int(Mid(linin$,1,Instr(linin$,"|",1)-1))
         linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1))
         nam$=Mid(linin$,1,Instr(linin$,"|",1)-1)
         If nam$=name$ Then
            PlayerX=x
            PlayerY=y
         Else
            ok=0
            For player.player=Each player
               If player\name$=nam$ Then
                  ok=1
                  player\x=X
                  player\y=y
               EndIf
            Next
            If ok=0 Then
               player.player=New player
               player\name=nam$
               player\x=X
               player\y=y
            EndIf
         EndIf
      EndIf
      
   
   EndIf

   move=0
   If KeyDown(203) Then
      playerx=playerx-10
      move=1
   EndIf
   If KeyDown(200) Then
      playery=playery-10
      move=1
   EndIf
   If KeyDown(205) Then
      playerx=playerx+10
      move=1
   EndIf
   If KeyDown(208) Then
      playery=playery+10
      move=1
   EndIf

   If sekunde>1 Then
      WriteLine udp,"2|"+name$+"|"+playerx+"|"+playerY+"|"

      SendUDPMsg udp,host_ip,2011
      sekunde=0
   EndIf
   
   If KeyDown (1) Then End
   Zeit_Update()
Forever

Function Zeit_Update()
   If (MilliSecs() - timer) > 300 Then
         sekunde = sekunde + 1
       timer = MilliSecs()
   EndIf
End Function



SERVER:
Code: [AUSKLAPPEN]
AppTitle "Blitz UDP Echo Server"

UDPTimeouts 100

udp=CreateUDPStream( 2011 )
If Not udp RuntimeError "CreateUDPStream failed"

Print "Echo Server - "+DottedIP$( UDPStreamIP( udp ) )+":"+UDPStreamPort( udp )

WTimer=CreateTimer(100)


Global player.player
Type player
Field name$
Field x,y
Field ip
End Type

Global timer,sekunde

Repeat
   For player.player=Each player
      If player\name$="" Then Delete player.player
   Next
   ip=RecvUDPMsg( udp )
   If Eof( udp )<0 RuntimeError "RecvUDPMsg failed"
   If ip



   linin$=ReadLine$( udp )

   Menu=Int(Mid(linin$,1,Instr(linin$,"|",1)))
   linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1))

   If menu=1 Then
      pname$=Mid(linin$,1,Instr(linin$,"|",1)-1)
      
      player.player=New player
      player\name$=pname$
      player\x=Rnd(700)
      player\y=Rnd(500)
      player\ip=ip

      For player.player=Each player
         WriteLine udp,"1|"+player\x+"|"+player\y+"|"+player\name$+"|"
         SendUDPMsg udp,ip,UDPMsgPort(udp)
      Next
   EndIf

   If menu=2 Then
      nam$=Mid(linin$,1,Instr(linin$,"|",1)-1)
      linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1))
      x=Int(Mid(linin$,1,Instr(linin$,"|",1)-1))
      linin$=Mid(linin$,Instr(linin$,"|",1)+1,Len(linin$)-Instr(linin$,"|",1))
      y=Int(Mid(linin$,1,Instr(linin$,"|",1)-1))
      
      
      bewegung=0
      For player.player=Each player
         If nam$=player\name$ Then
         
            player\x=x
            player\y=y
            
            bewegung=1
         EndIf
      Next
   
   EndIf

   If sekunde>1 Then
      a=0
      For player.player=Each player
         WriteLine udp,"1|"+player\x+"|"+player\y+"|"+player\name$+"|"
         SendUDPMsg udp,ip,UDPMsgPort(udp)
         a=a+1
      Next
      sekunde=0
      Print "An "+a+" Clients gesendet."
   EndIf

   

   EndIf
   Delay 0
   Zeit_Update()
Forever



Function Zeit_Update()
   If (MilliSecs() - timer) > 300 Then
         sekunde = sekunde + 1
       timer = MilliSecs()
   EndIf
End Function



ich bedanke mich für eure hilfen.

Noobody

BeitragMi, Okt 03, 2007 20:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich finde den Fehler zwar nicht, aber wieso liest du die Nachrichten so kompliziert aus?
Du schreibst alles als Line in den Stream, dabei, könntest du doch einfach die Befehle WriteByte, WriteString und WriteByte verwenden. Das erspart dir ne Menge Arbeit Razz
Ausserdem würde ich dir empfehlen, das ganze mit der ENet-Library zu machen, die sich da irgendwo im DLL's und Userlib's Forum befindet.
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

Mathias-Kwiatkowski

BeitragSo, Okt 07, 2007 23:14
Antworten mit Zitat
Benutzer-Profile anzeigen
ich denke mal das auslesen der narichten geht so am schnellsten, bin mir aber nicht so sicher, und wie ich es mit write byte machen sollte das weiss ich nicht genau, die lib, ich weiss nicht ob diese so ideal dafür ist.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group