Serverliste im lokalen Netzwerk
Übersicht

![]() |
TheProgrammerBetreff: Serverliste im lokalen Netzwerk |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
TheProgrammer |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah, vielen Dank. ![]() ![]() |
||
aktuelles Projekt: The last day of human being |
Yogu |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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? ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Mich hatte das gestern auch interessiert, also hab ich auch mal einen solchen Code geschrieben gehabt. Bei mir klappt er ![]() 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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Mr Hopp |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group