Wieder mal Probleme mit dem Netzwerkcode!

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

fliege

Betreff: Wieder mal Probleme mit dem Netzwerkcode!

BeitragMi, Aug 11, 2004 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Wieso funktioniert folgender Code nicht? Ich habe ein großes Terrain in mehrere unsichtbare Sektoren aufgeteilt,
sodass nicht an jeden Spieler alle Daten gesendet werden müssen. Aber ich sehe z.b.: Meinen Bruder nicht, wenn ich in der
"iplist.txt" seine Netzwerk - IP- Adresse angegeben habe.Bitte helft mir, den ich möchte nur meinen Bruder sehen können, wenn er sich bewegt...
Ich weis, das es ein langer Code ist, aber vielleicht aknn man da noch einiges rauskürzen...
Hoffe, ihr könnt mir helfen den Fehler zu finden und ihn zu beheben.
Fliege

Code: [AUSKLAPPEN]
Const send_port = 9000
Const recv_port = 9001
Global send_stream = CreateUDPStream(send_port)
Global recv_stream = CreateUDPStream(recv_port)

Global online_players
Global must_update
Global myip$
Global myname$

mydatas = OpenFile("mydatas.ip")
If mydatas <> 0
   myip$ = ReadLine(mydatas)
   myname$ = ReadLine(mydatas)
Else
   mydatas = WriteFile("mydatas.ip")
   myip$ = Input("IP - Adresse: ")
   myname$ = Input("Name : ")
   WriteLine mydatas, myip$
   WriteLine mydatas, myname$
EndIf

Global ownip = INT_IP(myip$)
Global ownname$ = myname$

Type onlinespieler
   Field ip
   Field name$
   Field mesh
   Field x#,y#,z#
   Field pitch#,yaw#,roll#
   Field sektor
End Type

Global onlineplayer.onlinespieler

Function check_online_players()
   friends_list = OpenFile("iplist.txt")
      If friends_list <> 0
         Repeat
            friendsip$ = ReadLine(friends_list)
            If friendsip$ = "" Then Exit
            friends_ip = INT_IP(friendsip$)
            WriteLine send_stream, 1450101
            SendUDPMsg send_stream, friends_ip, recv_port
            WriteLine send_stream, ownip
            SendUDPMsg send_stream, friends_ip, recv_port
            If RecvUDPMsg(Recv_stream)
             answer = ReadLine(Recv_stream)
            EndIf
            If answer = 1
               wm(14501011)
               send(friends_ip)
            EndIf
            name$ = Recv()
            wm(14501013)
            send(friends_ip)
            x# = Float(Recv())
            y# = Float(Recv())
            z# = Float(Recv())
            wm(14501016)
            send(frineds_ip)
            Pitch# = Float(Recv())
            Yaw# = Float(Recv())
            Roll# = Float(Recv())
            wm(14501019)
            send(friends_ip)
            sektor = Recv()
            onlineplayer = New onlinespieler
               onlineplayer\ip = friends_ip
               onlineplayer\name$ = name$
               onlineplayer\mesh = CreateCube()
               onlineplayer\x# = x#
               onlineplayer\y# = y#
               onlineplayer\z# = z#
               onlineplayer\pitch# = Pitch#
               onlineplayer\yaw# = Yaw#
               onlineplayer\roll# = Roll#
               onlineplayer\sektor = sektor
            wm(1450102)
            send(friends_ip)
            wm(ownname$)
            send(friends_ip)
            wm(EntityX(figure))
            send(friends_ip)
            wm(EntityY(figure))
            send(friends_ip)
            wm(EntityZ(figure))
            send(friends_ip)
            wm(EntityPitch(figure))
            send(friends_ip)
            wm(EntityYaw(firgure))
            send(friends_ip)
            wm(EntityRoll(figure))
            send(friends_ip)
            wm(in_sektor)
            send(friends_ip)
         Forever
      EndIf
End Function

Function new_onliner()
   recv_ip = INT_IP(Recv())
   wm(1)
   send(recv_ip)
   If Recv() = "14501011"
      wm(ownname$)
      send(recv_ip)
   EndIf
   If Recv() = "14501013"
      wm(EntityX(firgure))
      send(recv_ip)
      wm(EntityY(figure))
      send(recv_ip)
      wm(EntityZ(figure))
      send(recv_ip)
   EndIf
   If Recv() = "14501016"
      wm(EntityPitch(figure))
      send(recv_ip)
      wm(EntityYaw(figure))
      send(recv_ip)
      wm(EntityRoll(figure))
      send(recv_ip)
   EndIf
   If Recv() = "14501019"
      wm(in_sektor)
      send(recv_ip)
   EndIf
   If Recv() = "1450102"
   name$ = Recv()
   x# = Float(Recv())
   y# = Float(Recv())
   z# = Float(Recv())
   Pitch# = Float(Recv())
   Yaw# = Float(Recv())
   Roll# = Float(Recv())
   sektor = Recv()
   onlineplayer = New onlinespieler
      onlineplayer\ip = recv_ip
      onlineplayer\name$ = name$
      onlineplayer\x# = x#
      onlineplayer\y# = y#
      onlineplayer\z# = z#
      onlineplayer\Pitch# = Pitch#
      onlineplayer\Yaw# = Yaw#
      onlineplayer\Roll# = Roll#
      onlineplayer\sektor = sektor
      online_players = online_players + 1
   EndIf
End Function

Function send_my_pos()
   For onlineplayer = Each onlinespieler
      If onlineplayer\sektor = in_sektor
         wm(155010)
         send(onlineplayer\ip)
         wm(ownip)
         send(onlineplayer\ip)
         wm(EntityX(figur))
         send(onlineplayer\ip)
         wm(EntityY(figur))
         send(onlineplayer\ip)
         wm(EntityZ(figur))
         send(onlineplayer\ip)
         wm(EntityPitch(figur))
         send(onlineplayer\ip)
         wm(EntityYaw(figur))
         send(onlineplayer\ip)
         wm(EntityRoll(figur))
         send(onlineplayer\ip)
      EndIf
   Next
End Function

Function recv_other_pos()
   recv_ip = INT_IP(Recv())
   select_player_per_ip(recv_ip)
   onlineplayer\x# = Float(Recv())
   onlineplayer\y# = Float(Recv())
   onlineplayer\z# = Float(Recv())
   onlineplayer\pitch# = Float(Recv())
   onlineplayer\yaw# = Float(Recv())
   onlineplayer\roll# = Float(Recv())
   PositionEntity onlineplayer\mesh, onlineplayer\x#, onlineplayer\y#, onlineplayer\z#
   TurnEntity onlineplayer\mesh, onlineplayer\pitch#, onlineplayer\yaw#, onlineplayer\roll#
End Function

Function new_sektor_enterd()
   For onlineplayer = Each onlinespieler
      wm(166610)
      send(onlineplayer\ip)
      wm(ownip)
      send(onlineplayer\ip)
      wm(in_sektor)
      send(onlineplayer\ip)
   Next
End Function

Function recv_new_sektor()
   recv_ip = INT_IP(Recv())
   select_player_per_ip(recv_ip)
   onlineplayer\sektor = Recv()
End Function

Function select_player_per_ip(ipadress)
   Repeat
      onlineplayer = After onlineplayer
      If onlineplayer\ip = ipadress Then Exit
   Forever
End Function

Function update_network()
   code$ = Recv()
   If code$ = "1450101"
      new_onliner()
   EndIf
   If code$ = "155010"
      recv_other_pos()
   EndIf
   If code$ = "166610"
      recv_new_sektor()
   EndIf
End Function
   



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

Function wm(txt$)
   WriteLine send_stream, txt$
End Function

Function send(ip)
   SendUDPMsg send_stream, ip, recv_port
End Function

Function Recv()
   If RecvUDPMsg(Recv_stream)
      txt$ = ReadLine(Recv_stream)
   EndIf
   Return txt$
End Function
Wer weiß was kommt.. ?
 

fliege

BeitragDo, Aug 12, 2004 10:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist etwas aufgefallen!
Wenn ich meine Netzwerk - IP - Adresse mit INT_IP(IP$) umrechnen lasse, bekomme ich eine Negative Zahl womit ich natürlich nichts anfangen kann. Amsonsten habe ich nur die check_online_players() vergessen auszuführen Embarassed Embarassed glaube ich mal, aber wenn sich mein Bruder "einloggt" erhalte ich eine Fehlermeldung: Parameter must be positive
Meine Netz IP : 192.168.111.13
Bruders Netz IP : 192.168.111.15
Bitte helft mir!
Wer weiß was kommt.. ?
 

Steffen

BeitragDo, Aug 12, 2004 11:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Es ist kein Problem, dass eine negative Zahl rauskommt. IPs brauchen 4 Byte , also 32 bit. Ein Integer hat auch 32 bit, also belegt eine IP den gesamten Integer-Bereich, auch das Vorzeichenbit. Also ist die Zahl negativ, wenn der erste Block der IP größer ist, als 127. Deine IPs fangen mit 192 an, also müssen sie als Integer negativ sein.
>PC: Pentium III 750MHz, ATI Rage 128 mit 32Mb, Windows Me, Blitz3D 1.87
>Laptop: Pentium M 1,4GHz, 512 Mb DDR, ATI Mobility Radeon 9000 mit 64Mb DDR, Windows XP Home, Blitz3D 1.87
 

fliege

BeitragDo, Aug 12, 2004 11:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Heist ich soll den gesammten Wert nochmals mit Abs() ins positive Wandeln? Denn ich glaube, das es an UDP liegt, nur an positive IPs zu versenden, oder liege ich da falsch? Aber wieso kommt mir dann der Fehler "Parameter must be positive"??
Wer weiß was kommt.. ?

Xenon

BeitragDo, Aug 12, 2004 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
du darfst es auf keinen fall mit abs verändern, dann kommt nämlich ne andere IP raus!

Bei welcher funktion kommt Parameter must be positive?
 

fliege

BeitragDo, Aug 12, 2004 15:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich starte zuerst das Spiel bei mir. Danach bei meinem Bruder und dann kommt bei mir "Parameter must be positive" und dann stürtzt es ab.
Wer weiß was kommt.. ?

theBlade

BeitragDo, Aug 12, 2004 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function ipint(inputIP$)      ;wandelt die IP in eine DottedIP um
   Local break1,break2,break3,add1,add2,add3,add4,ipreturn
   break1 = Instr(inputIP$,".")
   break2 = Instr(inputIP$,".",break1+1)
   break3 = Instr(inputIP$,".",break2+1)
   add1 = Mid(inputIP$,1,break1-1)
   add2 = Mid(inputIP$,break1+1,break2-1)
   add3 = Mid(inputIP$,break2+1,break3-1)
   add4 = Mid(inputIP$,break3+1)
   ipreturn=(add1 Shl 24) + (add2 Shl 16) + (add3 Shl 8) + add4
   Return ipreturn
End Function
"Ich bin wie ich bin. Die einen kennen mich, die anderen können mich." (Dr. Konrad Adenauer)

UTFSB -> (use the fuckin "suchen"-button)

User posted image <- link -.-

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group