Serverliste im lokalen Netzwerk

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

TheProgrammer

Betreff: Serverliste im lokalen Netzwerk

BeitragSo, Feb 25, 2007 14:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ich würde gerne für mein Game ein Serverliste für das lokale Netzwerk anfertigen, jedoch weiß ich nicht, wo ich das Programm suchen lassen soll, um möglichst alle laufenden Server zu finden. Bis jetzt sucht er nur von 192.168.0.1 bis 192.168.0.254 unter dem Standardport. Wenn man die IP's jedoch nicht nach dem Muster verteilt, werden ja nicht alle Server gefunden. Gibt es eine Möglichkeit, wirklich nach jeder IP, von 1.1.1.1 bis 254.254.254.254 zu suchen und die Server zu finden?

Zur aktuellen Such-technik:
Ich gehe die IP's 192.168.0.1 bis 192.168.0.254 durch und sende ein byte... wenn eine Antwort für die IP kommt, die die Server-Informationen enthält, gibt es den Server.. das funktioniert auch ganz gut.
Nun würde es aber Ewigkeiten dauern, wirklich alle möglichen IP's zu durchsuchen.

Mfg
TheProgrammer
aktuelles Projekt: The last day of human being

StepTiger

BeitragSo, Feb 25, 2007 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Absolut richtig.
Normal nimmt man dafür auch einen Verzeichnisserver, der alle paar Sekunden ein Mal von jedem Server angepingt wird.
Bei Abfragen sendet er alle laufenden Server an den Clienten.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

TheProgrammer

BeitragSo, Feb 25, 2007 14:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Der Variante mit dem Verzeichnisserver möchte ich ausweichen. Bei anderen Games funktioniert es ja auch so.. Da werden immer gleich alle laufenden Server gefunden.
aktuelles Projekt: The last day of human being

D2006

Administrator

BeitragSo, Feb 25, 2007 14:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir mal das hier an:
http://de.wikipedia.org/wiki/Broadcast
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

Tankbuster

BeitragSo, Feb 25, 2007 14:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Beim start des Clients muss er einfach seine IP an den server senden!
Das Server speichert diese dann, und wenn ein anderer client auf das Spiel connecten will, kann er sich die IP beim server abhohlen!
So ist das bei den meißten games!
Twitter
Download Jewel Snake!
Windows|Android

D2006

Administrator

BeitragSo, Feb 25, 2007 14:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Gerade das "an den Server senden" ist doch das Problem!
Wir wissen nicht ob ein oder mehrere Server online sind und IPs kennen wir erst recht nicht. Die Sache mit dem Broadcast sollte funktionieren, ausprobiert habe ich sie allerdings noch nie.
Intel Core i5 2500 | 16 GB DDR3 RAM dualchannel | ATI Radeon HD6870 (1024 MB RAM) | Windows 7 Home Premium
Intel Core 2 Duo 2.4 GHz | 2 GB DDR3 RAM dualchannel | Nvidia GeForce 9400M (256 MB shared RAM) | Mac OS X Snow Leopard
Intel Pentium Dual-Core 2.4 GHz | 3 GB DDR2 RAM dualchannel | ATI Radeon HD3850 (1024 MB RAM) | Windows 7 Home Premium
Chaos Interactive :: GoBang :: BB-Poker :: ChaosBreaker :: Hexagon :: ChaosRacer 2

TheProgrammer

BeitragSo, Feb 25, 2007 15:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ah, vielen Dank. Smile Das funktioniert sogar Wink
aktuelles Projekt: The last day of human being
 

Yogu

BeitragSo, Feb 25, 2007 20:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Da gibt es doch die Function HostIP und CountHostIPs (In der Onlinehilfe im Bereich 2D/Netzwerk). Mit denen kann man alle Hosts im lokalen Netzwerk rausfinden.
Hab ich die Frage irgendwie falsch verstanden oder ist das wirklich die Lösung?

Tankbuster

BeitragSo, Feb 25, 2007 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich meinte eigentlich einen Masterserver, wie z.B. bei Warcraft, Shadow Ops und ähnlichem. Dieser Server ist den ganzen Tag on, und hat eine Feste IP bzw. dyn DNS, sodass man die DNS nur in jeden client einbauen muss! Dann gehts ganz gut!
Twitter
Download Jewel Snake!
Windows|Android

Hummelpups

BeitragMo, Feb 26, 2007 15:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Tankbuster, bei deinem ersten Post hab ich echt gedacht ob du dich nur
verlesen hast aber nun nach diesem Post überlege ich ob du wirklich nicht
schnallst das es keinen "MasterServer" geben soll? Rolling Eyes

Kannste deine Broadcastgeschichte mal posten wie du es Programmiertechnisch
umgesetzt hast?
Ich persönlich hätte es mit Multicasts versucht da sie das Netzwerk
sauberer halten als Broadcasts.

Muss selber mal ausprobieren ob es Max schafft auf BC Adressen zu
lauschen. Wär ne interessante geschichte.

IMurDOOM
blucode - webdesign - Ressource - NetzwerkSim
BlitzBasic 2D - BlitzMax - MaxGUI - Monkey - BlitzPlus

StepTiger

BeitragMo, Feb 26, 2007 17:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Mich hatte das gestern auch interessiert, also hab ich auch mal einen solchen Code geschrieben gehabt. Bei mir klappt er Smile
Code: [AUSKLAPPEN]
stream_in=CreateUDPStream(7022)
stream_out=CreateUDPStream(7023)

If stream_in=0 Then RuntimeError "Fehler! UDP konnte nicht erstellt werden!"
If stream_out=0 Then RuntimeError "Fehler! UDP konnte nicht erstellt werden!"

ip_count=CountHostIPs(GetEnv("localhost"))
For i=1 To ip_count
   own_ip=HostIP(1)
Next
broadcast=own_ip-(own_ip And 255)+255

While Not KeyHit(1)
   
   If KeyHit(57)
      
      WriteLine stream_out,"SEARCH"
      SendUDPMsg stream_out,broadcast,7022
      Print "Sende Broadcast!"
      last_time=MilliSecs()
      
   EndIf
   
   d=RecvUDPMsg(stream_in)
   While d<>0 And d<>own_ip
      While ReadAvail(stream_in)
         s$=ReadLine$(stream_in)
         Select s$
            Case "FOUND"
               Print "Server:  "+DottedIP$(d)+" Ping: "+(MilliSecs()-last_time)
            Case "SEARCH"
               WriteLine stream_out,"FOUND"
               SendUDPMsg stream_out,d,7022
               Print "Antwort: "+DottedIP$(d)
            Case s$<>"FOUND" And s$<>"SEARCH"
               Print s$
         End Select
         Delay 1
      Wend
      d=RecvUDPMsg(stream_in)
      Delay 1
   Wend
   
   Delay 10
   
Wend

CloseUDPStream stream_in
CloseUDPStream stream_out

End

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
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Mr Hopp

BeitragMi, Aug 22, 2007 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Erstmal entschuldigung, dass ich diesen leicht veralteten Thread nochmal hochkrame.
Dann zu deinem Beispiel:

Warum 2 Streams? Soweit ich weiß ist das doch garnicht nötig. Des weiteren ist die INT_IP funktion überflüssig. Und die For Each Schleife zum herausfinden der eigenen IP ebenfalls. Soweit zur Kritik. Nun meine eigendliche Frage: wie kommst du auf Code: [AUSKLAPPEN]
broadcast=own_ip-(own_ip And 255)+255
?? Und kann man diese Suche auch auf alle Ports ausweiten??

Vielen Dank.

Edit: Oh ich habe festgestellt, dass deine Formel einfach nur die letzten 3 Ziffern der IP auf 255 setzt. Bedeutet das, dass auf den IP's (bsp.) 192.168.0.*** gesucht wird? Und wäre auch ein 255.255.255.255 möglich?
Edit 2: Alle Fragen, bis auf die mit den Ports haben sich von selbst geklärt
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group