Alle Server an einem Port finden?



  • Hallo zusammen ... ich hoffe ich bin hier mit meiner Frage halbwegs richtig ...

    gibt es eine Funktion, die alle Server an einem Port ausgibt ... also die IP's von den Servern?

    Vielen Dank!



  • Willst du das ganze Internet durchforsten?
    Oder nur ein Intranet?
    Oder nur einen Computer?



  • Ich weiß leider nicht, was ein Intranet ist ... aber ich denke das ist erstmal egal ...

    Ich schreibe gerade ein Programm, was über TCP Informationen verschicken und empfangen kann.

    Dieses sollte eigentlich sowohl im LAN alsauch im WEB funktionieren.

    Ich weiß nur nicht, wie ich den Server finden soll, da ich ja nicht deren IP kenne. Sein Port ist ja constant.

    Also ich weiß aber nicht, wie ich das Problem lösen kann ....

    Bin über Hilfe dankbar!

    LG



  • Ich denke du solltest die Server-IP irgendwo hinterlegen, da es im "Web" ein Ding der Möglichkeit ist eine IP zu finden, hinter der ein Server genau an deinem Port genau auf dein connect wartet.

    Es gibt mit IP-Version 4 4 Milliarden möglich IP-Adressen (die zugegeben nicht alle das "Web" betreffen) und mit IP-Version 6 steigt die Anzahl der möglichen Adressen in unvorstellbare Dimensionen. Siehe dazu auch Wikipedia.



  • Das halte ich für eine weniger gute Idee.

    Denn so bin ich wieder ans Internet gebunden. Ich wollte doch gerade, dass es egal ist, ob Internet oder LAN.

    Mal davon abgesehen, dass es im LAN bedeutend leichter ist die IP des Servers rauszubekommen, kenne ich auch die IP des Servers im LAN unter Umständen nicht!

    Wie würde es den im LAN funktionieren?

    Ich verwende derzeitig IP-Version 2.0 ...



  • Im Lan kannst du von der überschaubaren Anzahl an IP Adressen testen ob dort ein Server ist der am gegebenen Port eine Anfrage annimmt und auf eine Testnachricht (die du noch erstellen müstest) richtig reagiert.

    Im Internet gibt es nur eine einzige Möglichkeit. Du mußt einen (Verwaltungs) Server an einer festen IP Adresse betreiben, der die Verwaltung der anderen Server (von denen du die IP adresse nicht kennst) übernimmt. Dazu mußt du in das Programm die Adresse dieses Verwaltungsservers fest einbauen. Jeder andere Sever muß dann sobald das Programm läuft sich bei dem Verwaltungsserver anmelden und die eigene IP Adresse dort bekannt geben. Nun kannst du einfach den Verwaltungsserver nach den IP Adressen aller Server fragen 🙂



  • Ich habe mal was von ner enumHorsts Funktion gelesen ... gibt es nicht solch eine Funktion, die genau das ist, was ich suche???

    LG



  • NEIN,

    was meinst du warum die ganzen Spielehersteller für Multiplayerspiele die aufwendigen Portale betreiben wenn sich die Teilnehmer des spiels auch so finden würden.



  • bzw. deren Computer



  • Thomas_ schrieb:

    Ich habe mal was von ner enumHorsts Funktion gelesen ... gibt es nicht solch eine Funktion, die genau das ist, was ich suche???

    lol, horsts 🙂

    um dir mal die dimensionen zu verdeutlichen: es gibt 4294967296 verschiedene ipv4-adressen. wenn du für das testen jeder dieser adressen nur 1 ms brauchen würdest, würde es fast 50 tage dauern, bis du eine komplette liste aller möglichen rechner hast. und du kannst realistischerweise davon ausgehen, dass es im durchschnitt mindestens 100 ms dauern dürfte, eine adresse zu checken.

    noch besser: es gibt 340282366920938463463374607431768211456 ipv6-adressen. so viele adressen könntest du bis zum tod unseres sonnensystems nicht testen, selbst wenn du 1 mio rechner dafür zur verfügung hättest.

    die übliche herangehensweise ist es, dass es so etwas wie einen oder mehrere "master server" gibt, die von anderen servern signalisiert bekommen, dass der gewünschte dienst dort gerade verfügbar ist. clients können diese liste dann abrufen und haben so eine (halbwegs) aktuelle liste verfügbarer server.

    im lan könnte man es auch so machen, dass man einen udp-broadcast rausschickt und alle server melden sich beim empfang des broadcasts beim absender. das funktioniert in kleinen netzwerken ganz gut, im internet aber nicht.

    für beide herangehensweisen muss der server entsprechend programmiert sein.



  • wow 😮 ... es dauert ja schon ne zeit die Zahl 340282366920938463463374607431768211456 überhaupt vorzulesen ...

    Dann sehe ich ein, dass es sinvoll ist die IP irgendwo abrufbar zu machen.

    und es gibt - wenn auch nicht horst ... hehe - eine Funktion EnumHosts() ... aber da die - wie ich gelesen habe - zum directx gehört, habe ich davon die Finger gelassen.

    kannst du mir bitte das udp-broadcast etwas näher erklären?

    LG





  • eine mögliche umsetzung: du schickst regelmäßige broadcast (z.b. einen string "BITTE MELDE DICH!" alle 5 sekunden) per udp an die adresse 255.255.255.255 auf einem festgelegten port raus. deine software, die im lan auf verschiedenen rechnern läuft, horcht auf dem port und wertet alles aus, was sie dort empfängt. liest sie "BITTE MELDE DICH!", weiß sie von der existenz des servers.

    das funktioniert allerdings nur mit ipv4, ipv6 kennt keine broadcasts mehr. wie sich dieser mechanismus auf ipv6 übertragen lässt weiß ich nicht.



  • Gut Danke!
    broadcast und multicast scheint die Lösung zu sein ... leider finde ich im Inet dazu nur wenig Informationen ... gibt es dazu ein gutes Tutorial? Am Besten in 'Deutsch? Oder Beispielcode?

    LG



  • Wofür brauchst du da ein Tutorial? Was unterscheidet eine Nachricht an 192.168.1.234 von einer Nachricht an 255.255.255.255? 😕



  • Ganz einfach!

    broadcast und multicast funktionieren nur an UDP Sockets ... und ich weiß nicht, wie ich das einrichte ...

    Oder kann man auch mit TCP broadcast oder multicasten?

    LG


Anmelden zum Antworten