LAN Spiele anzeigen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

ToeB

Betreff: LAN Spiele anzeigen

BeitragSo, Jun 22, 2008 19:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich wollte für mein Spiel (LAN/UDP) eine Anzeige machen, welche Spiele gehosted wurden. Aber wie mach ich das ?

Kann ich das iwie intern lösen, also das ich einfach jede IP abfrage, ob Host oder nicht ?

Oder muss ich das mit einem externen Speicherort sein ? Aber wie bestimme ich so einen Externen Süeicherort bzw. wie kann ich daten draufschreiebn / Abrufen/ löschen ??

mfg ToeB
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!
 

BadDeath

BeitragSo, Jun 22, 2008 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Im LAN kannst du doch über die IP-Adresse 255.255.255.255 zb. ein Byte schicken. Das müsste dann jeder PC empfangen, da das ein Broadcast an alle IPs ist. Dann schickt jeder Host an die Absenderadresse, dass er ein Spiel offen hat.

PS: Ich bastel mir gerade ein PHP-Skript für den Internetgebrauch, welches ich in meinem Spiel einsetzen werde. Wenn jemand schon so etwas hat, wäre es nett, wenn er mich anschreibt....

ToeB

BeitragSo, Jun 22, 2008 20:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Also du meinst das so :
Zitat:
Client :
Send Byte "10" to "255.255.255.255"
WaitFor answer
Get All Host Ips

Server :
If RecvByte = "10"
SendByte to IP "10"


Meinst du das so in etwa ?

Danke auf jeden fall !

mfg ToeB
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!
 

BadDeath

BeitragSo, Jun 22, 2008 20:18
Antworten mit Zitat
Benutzer-Profile anzeigen
jop, so inetwa müsste das gehen - meines wissens. die server schreiben dann sowas wie "server auf ip xxx mit 32 spielern unter den namen server1 auf der testmap ohen passwort"

ToeB

BeitragSo, Jun 22, 2008 20:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht iwie nicht :

Client :
Code: [AUSKLAPPEN]
Port_recv = 8000:Port_send = 8001
   stream_send = CreateUDPStream(Port_send)
   stream_recv = CreateUDPStream(Port_recv)
   IP(1) = INT_IP("255.255.255.255")
   WriteByte(stream_send,10)
   SendUDPMsg(stream_send,IP(1),Port_send)
   wait_ms=MilliSecs()+2500
   Servers = 0
   Repeat
      If RecvUDPMsg(stream_recv) Then
         byte = ReadByte(stream_recv)
         Select byte
         Case 10
            Serv(Servers) = UDPMsgIP(stream_recv)
            Serv_Nam(Servers) = ReadString(stream_recv)
            Servers = Servers + 1
         End Select
      EndIf
      If wait_ms <= MilliSecs() Then Exit
   Forever
   Servers = Servers - 1
   Print "Servers Gefunden : "+Servers
   For i = 0 To Servers
      Print i+".: "+Serv_Nam(i)+"("+Serv(i)+")"
   Next
   Serv_Sel = Input("Host index : ")
   If Ser_Sel < 0 Then Serv_Sel = 0
   If Serv_Sel > Servers Then Serv_Sel = Servers
   IP(1) = Serv(Serv_Sel)
   Delay 100


Server :
Code: [AUSKLAPPEN]
While  RecvUDPMsg(stream_recv)
         Select ReadByte(stream_recv)
         Case 10
            IPIP = UDPMsgIP(stream_recv)
            WriteByte(stream_send,10)
            WriteString(stream_send,Name(1))
             SendUDPMsg(stream_send,IPIP,Port_send)
         End Select
   Wend


Der Client zeigt mir immer an : Servers gefunden : -1

Warum ? Was mach ich Falsch ?

nfg ToeB
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!
 

BadDeath

BeitragSo, Jun 22, 2008 21:52
Antworten mit Zitat
Benutzer-Profile anzeigen
So, ich habe mal schnell etwas gebastelt, läuft so weit, hat nur ein paar kleine Schönheitsfehler beim Anzeigen....

Ich habe dir leider etwas falsches erzählt, sry! Nämlich ist gestaltet sich die Broadcast-IP so:

Zitat:
Das Ziel sind die Teilnehmer eines bestimmten Netzes. Die Adresse wird durch die Kombination aus Zielnetz und dem Setzen aller Hostbits auf 1 angegeben. Folglich lautet die Adresse für einen directed broadcast in das Netz 192.168.0.0 mit der Netzmaske 255.255.255.0 (192.168.0.0/24): 192.168.0.255.

Quelle: wikipedia


Spieler, der alle Spiele abfragt:
Code: [AUSKLAPPEN]
stream = CreateUDPStream(80000)

Type Server
   Field IP
   Field Name$
End Type   

IP = Int_IP("192.168.0.255")

Const Search = 1
Const NewServer = 2

AppTitle "1 zum Abfragen"

While Not KeyHit(1)
   Cls

   i=0
   
   If KeyHit(2) Then
      Text 0,i*20, "sende"
      i=i+1
      
      WriteByte Stream, Search
      SendUDPMsg Stream, IP, 80001
   End If
   
   Delete Each Server
   
   recv=RecvUDPMsg(stream)
   If(recv<>0)
      While(ReadAvail(Stream)>0)
         InIP = UDPMsgIP(stream)
         
         Select ReadByte(stream)
         
            Case NewServer
               
               Server.Server = New Server
                  Server\IP = InIP
                  Server\Name$ = ReadString$(stream)
         End Select
      Wend
      recv=RecvUDPMsg(stream)
   EndIf
   
   For Server.Server = Each Server
      Text 0,i*20, DottedIP$(Server\IP)
      i=i+1
      Text 0,i*20, Server\Name$
      i=i+1
      Print ""
   Next
   
   Delay 750
Wend

End


Function INT_IP(ip$)
   p1=Instr(ip$,".")
   p2=Instr(ip$,".",p1+1)
   p3=Instr(ip$,".",p2+1)
     Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1))
End Function


Und der antwortende Server
Code: [AUSKLAPPEN]
stream = CreateUDPStream(80001)

Const Search = 1
Const NewServer = 2

IP = Int_IP("192.168.0.255")


AppTitle "1 zum manuellen Sendung ohne Anfrage"

While Not KeyHit(1)
   i=0
   Cls
   
   recv=RecvUDPMsg(stream)
   If(recv<>0)
      While(ReadAvail(Stream)>0)
         InIP = UDPMsgIP(stream)
         In   = ReadByte(stream)
         
         Select In
         
            Case Search
               WriteByte Stream, NewServer
               WriteString Stream, "Test-Server"
               SendUDPMsg Stream, InIP, 80000
               
               Text 0,i*20, "Anfrage von " + DottedIP$(InIP)
               i=i+1
         End Select
      Wend
      recv=RecvUDPMsg(stream)
   EndIf
   
   If KeyHit(2) Then
      Text 0,i*20, "manuelle Sendung"
      i=i+1
      
      WriteByte Stream, NewServer
      WriteString Stream, "Test-Server"
      SendUDPMsg Stream, IP, 80000
   End If
   
   Delay 750
Wend

End







Function INT_IP(ip$)
   p1=Instr(ip$,".")
   p2=Instr(ip$,".",p1+1)
   p3=Instr(ip$,".",p2+1)
     Return (Int(Mid(ip$,1,p1))*16777216)+(Int(Mid(ip$,p1+1,p2-p1))*65536)+(Int(Mid(ip$,p2+1,p3-p2))*256)+Int(Mid(ip$,p3+1,-1))
End Function [quote][/quote]


Hoffentlich verstehst du meinen Code, habe leider keine Zeit für die Kommentare, da ich dringend ne Periodisierung für Geschichte machen muss..... Confused

ToeB

BeitragSo, Jun 22, 2008 22:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Heiß also im endeffekt, ich muss statt "255.255.255.255" "192.168.0.255" in meinen Code iengeben ?

Danke !

mfg ToeB
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!
 

BadDeath

BeitragSo, Jun 22, 2008 22:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Theoretisch schon, aber er hat bei mir trotzdem nicht funktioniert, also deiner..

BtbN

BeitragMo, Jun 23, 2008 11:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Problematisch wirds nur, wenn ein Netzwerk nicht 192.168.0.xxx ist, sondern irgend etwas anderes, oder gar ein Netz mit 2 Bytes fürn host.
Du must immer Subnetmask|deine IP nehmen, um die Broadcast-Addresse zu bekommen.

ToeB

BeitragMo, Jun 23, 2008 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Sry, aber ich komm net mit... Was muss ich jetzt machen ?

Danke auf jden Fall !


Mfg ToeB
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!
 

BadDeath

BeitragMo, Jun 23, 2008 12:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du in einem Netzwerk bist mit der Subnetzmaske 255.255.255.0, ist die IP, an die du die Frage senden willst, damit die alle erhalten, 192.168.0.255.

Welche Maske du hast, siehst du bei den Eigenschaften deiner Netzwerkverbindung (bei mir ist es 255.255.255.0, ist glaube ich auch der Standard):

user posted image

BtbN

BeitragMo, Jun 23, 2008 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Subnetmask 255.255.255.0 garantiert dir nicht, dass es 192.168.0.255 ist.
Es kann genau so gut 192.168.178.255 sein. Oder etwas belibig anderes. Wie gesagt, deine IP nehmen, und alle host-bits auf 1 setzen.

ToeB

BeitragMo, Jun 23, 2008 16:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay danke erstmal, also ich muss dann mit HostIP meine IP herausfinden und dann was genau ändern ? Host-Bits ? Was is das ? Die endung (.0.1;.0.2 usw) ??

thx !


Mfg ToeB
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!
 

BadDeath

BeitragMo, Jun 23, 2008 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Um die Broadcast-IP zu ermittlen, musst du deine IP binär mit der invertierten, binären Subnetzmaske durch Oder verknüpfen - so las ich das HIER eben Laughing

Ich habe auch einen Online-Rechner dazu gefunden: Klick

Bin gerade dabei das in eine Funktion zu quetschen, bis jetzt siehts schon mal gut aus, ich werde den Code dann hier reinstellen.


-------------------------------------

So, ich habs! Ich bin hab es zwar alles etwas zu umständlich gemacht, was mir aber erst später einfiel.

Hauptsache es funktioniert, oder?

Hier, meine Lösung zum errechnen der Broadcast-IP:
Code: [AUSKLAPPEN]
n = CountHostIPs("")
MeineIP = HostIP(1)

IP$ = DottedIP$(MeineIP)

Print "Broadcast-IP:" + Errechnen$(IP$, "255.255.255.0")

WaitKey
End



Function Errechnen$(IP$, Submask$)
   ;IP aufteilen
   IPClassA$ = Left$(IP$, Instr(IP$, ".")-1)
      IP$ = Mid$(IP$, Instr(IP$, ".")+1)
   IPClassB$ = Left$(IP$, Instr(IP$, ".")-1)
      IP$ = Mid$(IP$, Instr(IP$, ".")+1)
   IPClassC$ = Left$(IP$, Instr(IP$, ".")-1)
      IP$ = Mid$(IP$, Instr(IP$, ".")+1)
   IPClassD$ = IP$
   
   ;Subnetzmaske aufteilen
   SubClassA$ = Left$(Submask$, Instr(Submask$, ".")-1)
      Submask$ = Mid$(Submask$, Instr(Submask$, ".")+1)
   SubClassB$ = Left$(Submask$, Instr(Submask$, ".")-1)
      Submask$ = Mid$(Submask$, Instr(Submask$, ".")+1)
   SubClassC$ = Left$(Submask$, Instr(Submask$, ".")-1)
      Submask$ = Mid$(Submask$, Instr(Submask$, ".")+1)
   SubClassD$ = Submask$
   
   ;Dezimal zu Binär
   IP$ = ToBIT$(IPClassA$) + ToBIT$(IPClassB$) + ToBIT$(IPClassC$) + ToBIT$(IPClassD$)
   SubMask$ = ToBIT$(SubClassA$) + ToBIT$(SubClassB$) + ToBIT$(SubClassC$) + ToBIT$(SubClassD$)
   
   ;Invertieren
   For i = 1 To Len(SubMask$)
      If Mid$(Submask$, i, 1) = "1" Then SubMask2$ = SubMask2$ + "0"
      If Mid$(Submask$, i, 1) = "0" Then SubMask2$ = SubMask2$ + "1"
   Next
   
   ;OR-Verknüpfung
   For i = 1 To Len(IP$)
      If Mid$(Submask2$, i, 1) = 0 And Mid$(IP$, i, 1) = 0 Then
         Result$ = Result$ + "0"
      Else
         Result$ = Result$ + "1"
      End If
   Next
   
   ;Binär wieder in Dezimal
   ClassA$ = Mid$(Result$, 1, 9)
   ClassB$ = Mid$(Result$, 9, 8)
   ClassC$ = Mid$(Result$, 17, 8)
   ClassD$ = Mid$(Result$, 25, 8)
   
   ClassA$ = ToDec$(ClassA$)
   ClassB$ = ToDec$(ClassB$)
   ClassC$ = ToDec$(ClassC$)
   ClassD$ = ToDec$(ClassD$)

   Return ClassA$ + "." + ClassB$ + "." + ClassC$ + "." + ClassD$
End Function



Function ToDec$(Zahl$)
   If Mid$(Zahl$, 1, 1) = "1" Then Dec = Dec + 128
   If Mid$(Zahl$, 2, 1) = "1" Then Dec = Dec + 64
   If Mid$(Zahl$, 3, 1) = "1" Then Dec = Dec + 32
   If Mid$(Zahl$, 4, 1) = "1" Then Dec = Dec + 16
   If Mid$(Zahl$, 5, 1) = "1" Then Dec = Dec + 8
   If Mid$(Zahl$, 6, 1) = "1" Then Dec = Dec + 4
   If Mid$(Zahl$, 7, 1) = "1" Then Dec = Dec + 2
   If Mid$(Zahl$, 8, 1) = "1" Then Dec = Dec + 1
   
   Return Str$(Dec)
End Function



Function ToBIT$(Zahl)
   If Zahl >= 128 Then
      Zahl = Zahl - 128
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If
   
   If Zahl >= 64 Then
      Zahl = Zahl - 64
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If
   
   If Zahl >= 32 Then
      Zahl = Zahl - 32
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If

   If Zahl >= 16 Then
      Zahl = Zahl - 16
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If

   If Zahl >= 8 Then
      Zahl = Zahl - 8
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If
   
   If Zahl >= 4 Then
      Zahl = Zahl - 4
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If

   If Zahl >= 2 Then
      Zahl = Zahl - 2
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If

   If Zahl >= 1 Then
      Zahl = Zahl - 1
      Out$ = Out$ + "1"
   Else
      Out$ = Out$ + "0"
   End If

   Return Out$
End Function

ToeB

BeitragMo, Jun 23, 2008 18:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke das du dir die Mühe gemacht hast, ich hab aber selber mal nachgeforscht und habb erstmal nur die letzte ziffe mit 255 ersetzt... Aber deine Function Functioniert super ! Danke !

Ich habs befor du mir den Code gegebn hats mal ausprobiert mit der IP 192.168.10.255 und es hat geklappt, aber da nicht überall die Brodcast-IP 192.168.10.255 sondern vil 192.168.0.255 oder anders ist, finde ich deine Function praktisch (Kannste mal ins Codearchiv vil. stellen ^^)

mfg ToeB
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!
 

BadDeath

BeitragMo, Jun 23, 2008 18:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Gut, dass du wenigstens auch gebrauchen kannst ^^

Habe die gerade reingestellt.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group