Es wird nichts gesendet

Übersicht BlitzBasic Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

the FR3AK

Betreff: Es wird nichts gesendet

BeitragMo, Jul 30, 2007 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir ein kleines 3D Testprogramm geschrieben mit dem ich versuchen will eine Lanverbidnung herzustellen...

Mein Problem ist das die Positionen usw. nicht an den Client/Host gesendet werden...



er der Gesamte Code:


Code: [AUSKLAPPEN]
host_port=9998
client_port=9999

eing$=Input("Für Host bitte host eingeben für Join join:")

If eing$="join" Then
   hosting=1
Else
   hosting=2
End If



Type player
   Field name$
   Field ip
   Field x#
   Field y#
   Field z#
   Field entity
End Type

Global p.player



Global stream
Global THE_STRING$


If hosting = 1
 stream = createudpstream(client_port)
else
 stream = createudpstream(host_port)
EndIf

myname$=input("Dein Name:")

If hosting = 1
   my_IP$=Input("IP-Addresse:")
   IP=intip(my_ip$)
   writebyte(stream, 1)
   writeline(stream, MyName$)
   sendudpmsg(stream, IP, host_port)
EndIf


timer = CreateTimer(40) ;max. FPS auf 40 setzen


;===================================================


Graphics3D 800,600,0,2
SetBuffer BackBuffer()

Global cam=createcamera()
PositionEntity cam,0,10,0
Global block=createcube()
ScaleEntity block,2,2,2
EntityParent block,cam
PositionEntity block,0,-10,30
EntityColor block,rnd(1,255),rnd(1,255),rnd(1,255)
PointEntity cam,block


While Not KeyHit(1)

WaitTimer(timer)

If hosting=1 Then
   updateclient()
Else If hosting=2 Then
   updatehost()
EndIf

If KeyDown(200) Then
   MoveEntity cam,0,0,1
End If
If KeyDown(208) Then
   MoveEntity cam,0,0,-1
End If
If KeyDown(205) Then
   MoveEntity cam,1,0,0
End If
If KeyDown(203) Then
   MoveEntity cam,-1,0,0
End If


RenderWorld
updateworld

flip
Wend




Function intIP(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





Function updatehost()

For p.player = Each player ;jeden Spieler durchlaufen
  If Not p\ip = msgfrom ;verhindern, dass sich der Spieler selbst erkennt
      WriteByte(stream,3) ;3 in unseren Stream schreiben
      Writefloat(stream,entityx(block)) ;x-pos
      Writefloat(stream,entityy(block)) ;y-pos
      Writefloat(stream,entityz(block)) ;z-pos
     sendUDPMsg(stream, p\ip, client_port) ;das byte und die positionen an jeden im chat senden
   End If
Next 
     
 If RecvUDPMsg(stream)
 

  msgtype = ReadByte(stream)
  msgFrom = UDPMsgIP(stream)

 Select(msgtype)
  Case 1
   
   p.player = New player ;neuen player adden
   p\ip = msgfrom
   p\name$ = readline(stream) ;namen des spielers aus dem stream lesen
   New_player_name$ = p\name$
   p\x#=0
   p\y#=-10
   p\z#=50
   p\entity=createcube()
   PositionEntity p\entity,0,-10,50
      
   print("Neuer Mitspieler: " + p\name$)
   
   For p.player = Each player ;jeden Spieler durchlaufen
    If Not p\ip = msgfrom ;verhindern, dass sich der Spieler selbst erkennt
     WriteByte(stream,1) ;1 in unseren Stream schreiben
     WriteLine(stream,New_player_name$) ;namen des neuen spielers in den stream packen
     SendUDPMsg(stream, p\ip, client_port) ;das byte und den namen des neuen an jeden im chat senden
    EndIf
   Next
   
    Case 2 ;Nachricht erhalten
     
     the_msg$ = Readstring(stream)
     Print(the_msg$)
     
     Case 3 ; positionen übergabe
        For p.player = Each player ;jeden Spieler durchlaufen
         If Not p\ip = msgfrom ;verhindern, dass sich der Spieler selbst erkennt
         End
           p\x#=readfloat(stream) ;xpos
           p\y#=readfloat(stream);ypos
           p\z#=readfloat(stream) ;zpos
           PositionEntity p\entity,p\x#,p\y#,p\z#
       EndIf
      Next
  End Select
 
   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
End if


End Function



Function updateclient()

For p.player = Each player ;jeden Spieler durchlaufen
  If Not p\ip = msgfrom ;verhindern, dass sich der Spieler selbst erkennt
      WriteByte(stream,3) ;3 in unseren Stream schreiben
      Writefloat(stream,entityx(block)) ;x-pos
      Writefloat(stream,entityy(block)) ;y-pos
      Writefloat(stream,entityz(block)) ;z-pos
     sendUDPMsg(stream, p\ip, host_port) ;das byte und die positionen an jeden im chat senden
   End If
Next 

 If RecvUDPMsg(stream)
 
  msgtype = ReadByte(stream)
  msgFrom = UDPMsgIP(stream)

 Select(msgtype)
  Case 1
   
 
   p.player = New player ;neuen player adden
   p\ip = msgfrom
   p\name$ = readline(stream) ;namen des spielers aus dem stream lesen
   New_player_name$ = p\name$
   p\x#=0
   p\y#=0
   p\z#=50
   p\entity=createcube()
      PositionEntity p\entity,0,0,50
   print("Neuer Mitspieler: " + p\name$)
   
   For p.player = Each player ;jeden Spieler durchlaufen
    If Not p\ip = msgfrom ;verhindern, dass sich der Spieler selbst erkennt
     WriteByte(stream,1) ;1 in unseren Stream schreiben
     WriteLine(stream,New_player_name$) ;namen des neuen spielers in den stream packen
     SendUDPMsg(stream, p\ip, host_port) ;das byte und den namen des neuen an jeden im chat senden
    EndIf
   Next
   
  Case 2 ;Nachricht erhalten
     
     the_msg$ = Readline(stream)
     Print(the_msg$)
     
  Case 3 ;positionen übergabe
     For p.player = Each player ;jeden Spieler durchlaufen
         If Not p\ip = msgfrom ;verhindern, dass sich der Spieler selbst erkennt
        p\x#=readfloat(stream) ;xpos
        p\y#=readfloat(stream);ypos
        p\z#=readfloat(stream) ;zpos
        PositionEntity p\entity,p\x#,p\y#,p\z#
    EndIf
   Next
  End Select
 
  EndIf
 
End Function

End

 

Dreamora

BeitragMo, Jul 30, 2007 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun, der UDP Stream wurde gewiss erst aufgebaut und du hast sicher auch den Port aus der nachricht ausgelesen und nicht einfach irgendwas festgelegt was vom client / router evtl geändert wurde oder? Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

the FR3AK

BeitragMo, Jul 30, 2007 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versteh nicht was du damit meinst... kann man das auch anderst Formulieren??

AmateurBB

Betreff: UDP

BeitragDi, Jul 31, 2007 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Muss das Spiel unbedingt über UDP laufen oder geht auch DirectPlay? Das ist glaub ich einfacher zu programmieren...
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/

the FR3AK

BeitragDi, Jul 31, 2007 20:30
Antworten mit Zitat
Benutzer-Profile anzeigen
JA es soll UDP sein Idea

Ich habe es jetzt alleine hinbekommen...habe dafür aber einen völlig neuen Code schreiben müssen Confused

AmateurBB

Betreff: Gut so...

BeitragMi, Aug 01, 2007 19:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte den Code eigentlich verbessern, aber irgendwie macht das mein Rechner nicht mehr mit. Allerdings läuft auch kein DirectPlay mehr. Kann mir da jemand helfen?
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/
 

Marek

BeitragMi, Aug 01, 2007 20:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Gehts allgemein oder nur bei BlitzBasic nicht mehr?
Wer lesen kann ist klar im Vorteil...

AmateurBB

Betreff: BB

BeitragDo, Aug 02, 2007 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Es geht nur unter BlitzBasic nicht mehr... Evil or Very Mad
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/
 

Dreamora

BeitragDo, Aug 02, 2007 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Klingt sehr nach Firewall oder etwas ähnlichem.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

AmateurBB

Betreff: Firewall is aus...

BeitragDo, Aug 02, 2007 20:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Firewall ist eigentlich aus... vielleicht Firewall ausschalten und neustarten...
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/

AmateurBB

Betreff: funktioniert auch nicht :-(

BeitragDo, Aug 02, 2007 20:58
Antworten mit Zitat
Benutzer-Profile anzeigen
...funktioniert auch nicht...

aber der code ist in Ordnung, oder?

Code: [AUSKLAPPEN]

AppTitle "Spielname"
While wahl < 1 Or wahl > 2
Cls
Print "Bitte wählen:"
Print " 1. Spiel erstellen"
Print " 2. Spiel beitreten"
wahl=Input("Auswahl: ")
wahl=Int(wahl)
Wend
Color 0, 255, 0
If wahl = 1 Then
   AppTitle "Spiel erstellen"
   Print "Auswahl: Spiel erstellen."
   Print "Erstelle Netzwerkspiel..."
   host=HostNetGame("Spiel")
   If host = 2 Then
      Print "...erfolgreich."
      n = CountHostIPs("")
      For apl = 1 To n
         Print "Ihre IP-Adresse ist: "+DottedIP$(HostIP(apl))
         If apl < n Then Print "und"
      Next
      myname$=GetEnv$("USERNAME")+" an "+GetEnv$("COMPUTERNAME")
      If myname$ = "" Then
            myname$=Input$("Ihr Name: ")
      EndIf
      playerID=CreateNetPlayer(myname$)
      Color 255, 255, 0
      Print "Spiel beginnt mit EINGABE!"
      Color 0, 255, 0
      FlushKeys
      While Not KeyHit(1)
         If RecvNetMsg() Then
            msgType=NetMsgType()
            Select msgType
               Case Is > 0 And is < 99
                  Print "(Nachricht zugeschickt von: "+ NetMsgFrom() + ")"
                  Print "(Nachricht zugeschickt an: "+ NetMsgTo() + ")"
                  Print "Nachricht: "+NetMsgData$()
               Case 99
                  Color 255, 0, 0
                  Print "FREMDES STARTZEICHEN!"            
               Case 100
                  Print NetPlayerName(NetMsgFrom()) + " ist dem Netzwerkspiel beigetreten."
               Case 101
                  Print "Ein Spieler hat das Netzwerkspiel verlassen."
               Case 102
                  Print "Sie sind nun Leiter des Spieles."
               Case 200
                  Color 255, 0, 0
                  Print "Ein Fehler ist aufgetreten."
            End Select
         End If
         If KeyHit(28) Then
            SendNetMsg(99, "Start", playerID)
            Exit
         EndIf
      Wend
   Else
      Color 255, 0, 0
      Print "Fehler beim Erstellen eines Netzwerkspiels!"
   EndIf
Else
   AppTitle "Spiel beitreten"
   Print "Auswahl: Spiel beitreten."
   n = CountHostIPs("")
   auswahl$=Input$("Bitte IP-Adresse des Leiters eingeben: ")
   Print "Verbinde..."
   client=JoinNetGame("Spiel", auswahl$)
   If client = 1 Then
      Print "Erfolgreich..."      
      myname$=GetEnv$("USERNAME")+" an "+GetEnv$("COMPUTERNAME")
      If myname$ = "" Then
            myname$=Input$("Ihr Name: ")
      EndIf
      playerID=CreateNetPlayer(myname$)
      Color 255, 255, 0
      Print "Warte auf Startzeichen..."
      Color 0, 255, 0
      While Not KeyHit(1)
         If RecvNetMsg() Then
            msgType=NetMsgType()
            Select msgType
               Case Is > 0 And is < 99
                  Print "(Nachricht zugeschickt von: "+ NetMsgFrom() + ")"
                  Print "(Nachricht zugeschickt an: "+ NetMsgTo() + ")"
                  Print "Nachricht: "+NetMsgData$()
               Case 99
                  Print "Start!"
                  Exit
               Case 100
                  Print NetPlayerName(NetMsgFrom()) + " ist dem Netzwerkspiel beigetreten."
               Case 101
                  Print "Ein Spieler hat das Netzwerkspiel verlassen."
               Case 102
                  Print "Sie sind nun Leiter des Spieles."
               Case 200
                  Color 255, 0, 0
                  Print "Ein Fehler ist aufgetreten."
            End Select
         End If
      Wend
Else
      Color 255, 0, 0
      Print "Fehler beim Beitreten in ein Netzwerkspiel!"
   EndIf

EndIf
AppTitle "Spiel"
RuntimeError "Ende des Programms"
StopNetGame()
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/
 

Dreamora

BeitragDo, Aug 02, 2007 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ZoneAlarm und sicher auch andere Firewalls sind auch im inaktiven zustand aktiv
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

AmateurBB

Betreff: Das weis ich...

BeitragDo, Aug 02, 2007 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Das habe ich auch schon mitbekommen, aber da ich vor einer Woche erst den Rechner neu formatiert habe, ist noch kein so ein Programm drauf...
Notebook Medion 97400 | 2 Ghz | 2x ATI Radeon XPRESS 200M (onboard) | Blitz3D 1.86 | Windows 7 / Windows XP | http://www.powerswitch-entertainment.de.vu/

ZaP

BeitragFr, Aug 03, 2007 10:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
...auch im inaktiven zustand aktiv


-> o0?


Also Fr3ak und ich haben beim testen festgestellt, dass auch mit geschlossenen ports die WHOIS nachricht (Sprich ein byte, mehr nicht) gesendet wird. Alle darauffolgendes lines und bytes jedoch nichtmehr, wofür muss man also die ports offen haben und wofür nicht?

Ich selbst habe keine Firewall auf dem Rechner, die Arbeit macht die Fritzbox.
Starfare: Worklog, Website (download)
 

Dreamora

BeitragFr, Aug 03, 2007 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Das kommt sehr auf die Box / Router an.

Wenn du höchste Sicherheit hast musst du schon für die WHOIS Ports offen haben.
Meist geht das noch ohne, aber ab dem Punkt wo er Pings senden will, wird geschluckt.

Man kann allerdings durchkommen. Such Mal auf Heise nach dem Skype Artikel. Dort wird beschrieben wie man auf geniale Art und Weise dynamische Portfreigaben aufbauen kann. (ohne UPNP)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

ZaP

BeitragFr, Aug 03, 2007 11:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich ein wenig gefährlich an...

Der Punkt der mich so interessiert ist, dass ein byte durchkommt, 5 bytes aber nicht.
Starfare: Worklog, Website (download)
 

Dreamora

BeitragFr, Aug 03, 2007 12:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Es kommt nicht 1 byte durch.
Es kommt eine spezielle Standardnachricht durch.

Und ist nicht gefährlich, da beide Seiten da ja mitmachen müssen (sie arbeiten zusammen mit einem masterserver und helfen sich gegenseitig durch zu kommen. einer alleine kann das net und ohne masterserver gehts auch net Smile )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

ZaP

BeitragFr, Aug 03, 2007 13:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Sonst wärs ja auch gefährlich Wink

Unser BB Programm sah so aus, dass nach der IP Eingabe ein byte an die eingegebene IP gesandt wurde, um dem Host mitzuteilen, das man da ist, und zu fragen, wer noch da ist (WHOIS). Als aber die positionen der Spieler drankamen, (x,y,z,pitch,yaw) gings nichtmehr...
Starfare: Worklog, Website (download)

the FR3AK

BeitragFr, Aug 03, 2007 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
=D

Zitat:
Als aber die positionen der Spieler drankamen, (x,y,z,pitch,yaw) gings nichtmehr...


Jop...dann hab ich nen komplett neuen und eigenen Code gecodet und hab da von anfang alles überlegt und dann gings =D

ZaP

BeitragFr, Aug 03, 2007 14:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich erinnere mich... den musste mir ma schicken... egal, privatgespräche hin und her, ich glaub das hier sollte jemand zumachen ^^
Starfare: Worklog, Website (download)

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group