Verbindung klappt nicht

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

ToeB

Betreff: Verbindung klappt nicht

BeitragFr, Mai 16, 2008 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Also hier bin ich mal wieder mit einem online Spiel und wieder mit einem Problem. Ich wollte erst, bevor ich das Spiel schreibe, die Verbindung checken. Also hab ich mir ein Server-Client Programm geschrieben. Das einloggen funzt auch, nur das senden von nachrichten nicht... Die kommen nicht an... Ich hoffe ihr könnt mir helfen...

Aufbau :
Arrow Client -> alle 25ms -> sende seine Daten an HOST
Arrow HOST -> liest Daten vom Client aus -> schikt alle Daten von den anderen Spieleren zurück
Arrow Client -> liest Daten vom HOST aus

Hier mal der Code :
Code: [AUSKLAPPEN]
Graphics3D 800,600,16,2
SetBuffer BackBuffer()
AppTitle "Paintball Area"

Global p_anz
Dim acc(1),IP(1),new_p(1),name$(1)
Dim mesh(1),x#(1),y#(1),z#(1),yw#(1),xw#(1)

Global tt

Global Server,ID,recv_PORT,send_PORT,recv_STREAM,send_STREAM,send_ms

Print ""
Print "Wilkommen zu PaintBall Area !"
Print "Was willst du tun ?"
Print "Ein Spiel    leiten - 1"
Print "Ein Spiel beitreten - 2"
Server = Input(" >>")
If Server < 1 Then Server = 1
If Server > 2 Then Server = 2

If Server = 1
   Print "[>> HOST <<]"
   acc(1) = 1
   ID = 1
   Print "Wie viele andere Spieler (ohne dich) ? (Min: 3 / Max: 15)"
   panz = Input(" >>")
   If panz < 3 Then panz = 3
   If panz > 15 Then panz = 15
   panz = panz + 1
   SetPanz(panz)
   Print "Verbinde..."
   Delay 250
   send_PORT = 8000
   recv_PORT = 8001
   send_STREAM = CreateUDPStream(send_PORT)
   recv_STREAM = CreateUDPStream(recv_PORT)
   If send_STREAM And recv_STREAM Then Print "Verbindung gelückt !" Else Print "Konnte keine Verbindung erstellen !":Delay 2000:End
   Delay 1000
Else
   Print "[>> JOIN <<]"
   Print "IP des HOST's ?"
   IP(1) = INT_IP(Input(" >>"))
   Delay 250
   send_PORT = 8001
   recv_PORT = 8000
   send_STREAM = CreateUDPStream(send_PORT)
   recv_STREAM = CreateUDPStream(recv_PORT)
   If send_STREAM=0 And recv_STREAM=0 Then Print "Herstellung einer Verbindung fehlgeschlagen !":Delay 2000:End
   WriteByte(send_STREAM,2)
   SendUDPMsg(send_STREAM,IP(1),send_PORT)
   msmsms = MilliSecs()
   Print "Warte auf Server..."
   Delay 100
   Repeat
      If RecvUDPMsg(recv_STREAM) Then
         Print "Server hat geantwortet !"
         Select ReadByte(recv_STREAM)
         Case 2
            ID = ReadInt(recv_STREAM)
            panz = ReadInt(recv_STREAM)
            SetPanz(panz)
            acc(1) = 1
            acc(ID) = 1
            New_p(1) = 1
            Exit
         Case 3
            Print "Serverliste voll !"
            Delay 2000
            End
         End Select
      EndIf
      If msmsms <= MilliSecs() - 2000 Then Print "Server hat nicht geantwortet !":Delay 2000:End
   Forever   
   send_ms = MilliSecs()
EndIf

Repeat
   Print "Dein Name ?"
   Name$(ID) = Input(" >>")   
   Print "Sicher das du "+name$(ID)+" heißen willst ?"
   Print "1 = JA [] 2 = NEIN"
   in_put = Input(">")
Until in_put = 1

acc(ID) = 1

Repeat
   UpdateWorld()
   RenderWorld()
   SendANDRecv()
   UpdateALLPl()
   Text 0,0,p_anz
   For i = 1 To p_anz
      If acc(i)
         Text 0,i*10,i+".: "+Name(i)+" / "+acc(i)
      EndIf
   Next
   Text 100,0,"TT: "+tt
   Flip
   Cls
Until KeyHit(1)
Ende()


Function SetPanz(panz)
   p_anz = panz
   Dim acc(p_anz),IP(p_anz),new_p(p_anz),name$(p_anz)
   Dim mesh(p_anz),x#(p_anz),y#(p_anz),z#(p_anz),yw#(p_anz),xw#(p_anz)
End Function

Function INT_IP(IP$)
   If Instr(IP$,".") <> 0 a1=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   If Instr(IP$,".") <> 0 a2=Int(Left(IP$,Instr(IP$,".")-1)):IP$=Right(IP$,Len(IP$)-Instr(IP$,"."))
   If Instr(IP$,".") <> 0 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 Ende()
   If Server = 1
      For j = 2 To p_anz
         If acc(j) = 1
            WriteByte(send_STREAM,3)
            SendUDPMsg(send_STREAM,IP(j),send_PORT)
         EndIf
      Next
   Else
      WriteByte(send_STREAM,3)
      WriteInt(send_STREAM,ID)
      SendUDPMsg(send_STREAM,IP(1),send_PORT)
   EndIf
   Delay 500
   End
End Function


Function SendANDRecv()
   If Server = 1
      While RecvUDPMsg(recv_STREAM)
         byte = ReadByte(recv_STREAM)
         tt = byte
         Select byte
         Case 1
            IDID = ReadInt(recv_STREAM)
            ;x(IDID) = ReadFloat(recv_STREAM)
            ;y(IDID) = ReadFloat(recv_STREAM)
            ;z(IDID) = ReadFloat(recv_STREAM)
            ;yw(IDID) = ReadFloat(recv_STREAM)
            ;xw(IDID) = ReadFloat(recv_STREAM)
            name$(IDID) = ReadString(recv_STREAM)
            WriteByte(send_STREAM,1)
            For i = 1 To P_anz   
               WriteByte(send_STREAM,acc(i))
               If acc(i) = 1
                  ;WriteFloat(send_STREAM,x(i))
                  ;WriteFloat(send_STREAM,y(i))
                  ;WriteFloat(send_STREAM,z(i))
                  ;WriteFloat(send_STREAM,yw(i))
                  ;WriteFloat(send_STREAM,xw(i))
                  WriteString(send_STREAM,name$(i))
               EndIf
            Next
            SendUDPMsg(send_STREAM,IP(IDID),send_PORT)
            tt = 1
         Case 2
            IDID = 0
            IPIP = UDPMsgIP(recv_STREAM)
            For i = 2 To p_anz
               If acc(i) = 0 Then IDID = i:Exit
               ;If acc(i) = 1 And UDPMsgIP(recv_STREAM) = IP(i) Then IDID = i:Exit
            Next
            If IDID
               IP(IDID) = IPIP
               New_p(IDID) = 1
               WriteByte(send_STREAM,2)
               WriteInt(send_STREAM,IDID)
               WriteInt(send_STREAM,p_anz)
               SendUDPMsg(send_STREAM,IP(IDID),send_PORT)
            Else
               WriteByte(send_STREAM,3)
               SendUDPMsg(send_STREAM,IPIP,send_PORT)
            EndIf
         Case 3
            IDID = ReadInt(recv_STREAM)
            new_p(IDID) = 2
         End Select
      Wend
   Else
      While RecvUDPMsg(recv_STREAM)
         Select ReadByte(recv_STREAM)
         Case 1
            For i = 1 To p_anz
               If i <> ID
                  ac = ReadByte(recv_STREAM)
                  If ac = 1
                     ;x(i) = ReadFloat(recv_STREAM)
                     ;y(i) = ReadFloat(recv_STREAM)
                     ;z(i) = ReadFloat(recv_STREAM)
                     ;yw(i) = ReadFloat(recv_STREAM)
                     ;xw(i) = ReadFloat(recv_STREAM)
                     name$(i) = ReadString(recv_STREAM)
                  EndIf
                  If acc(i) = 0 And ac = 1 Then new_p(i) = 1
                  If acc(i) = 1 And ac = 0 Then New_p(i) = 2
               EndIf
            Next
         End Select
         tt = 1
      Wend
      If send_ms <= MilliSecs() - 25 Then
         WriteByte(send_STREAM,1)
         WriteInt(send_STREAM,ID)
         ;WriteFloat(send_STREAM,x(ID))
         ;WriteFloat(send_STREAM,y(ID))
         ;WriteFloat(send_STREAM,z(ID))
         ;WriteFloat(send_STREAM,yw(ID))
         ;WriteFloat(send_STREAM,xw(ID))
         WriteString(send_STREAM,name$(ID))
         SendUDPMsg(send_STREAM,IP(1),send_PORT)
         tt = 1
      EndIf
   EndIf    
End Function

Function UpdateALLPl()
   For i = 1 To p_anz
      If New_p(i) = 1
         acc(i) = 1
         New_p(i) = 0
      ElseIf new_p(i) = 2
         acc(i) = 0
         New_p(i) = 0
         If i = 1
            Cls
            Text 400,100,"DER HOST HAT DAS SPIEL VERLASSEN!",1
            Text 400,200,"SPIEL MUSS AUS DIESEM GRUND BEENDET WERDEN!",1
            Text 400,400,"BELIBIGE TASTE ZUM FORTFAHREN DRÜCKEN!",1
            Flip
            Delay 1000
            FlushKeys()
            WaitKey()
            End
         EndIf
      EndIf
   Next
End Function


Woran kann das liegen das keiner von denen die nachricht empfagen ?

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

ToeB

BeitragFr, Mai 16, 2008 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, da ich annehme das mir keiner so recht helfen kann und ich das Problem gelöst habe, könnt ihr den Threat bitte schließen [@Mods]

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
 

Dreamora

BeitragFr, Mai 16, 2008 19:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Was war die Lösung?
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

ToeB

BeitragFr, Mai 16, 2008 20:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab den Code nochmal neu programmiert, diesmal aber mit Codehilfen von einem anderen Spiel,das ich mal gemacht habe und das lief... Funzt jetzt alles, woran es lag weiß ich aber immer noch nicht...

mfg Crack93
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group