Finden server lauscht auf einem bestimmten port auf dem lokalen Netzwerk
Habe ich eine server-Anwendung. Ich habe auch eine client-Anwendung. Ich bin in der Lage, zum herstellen einer tcp-Verbindung zwischen den Anwendungen, wenn beide Anwendungen auf dem gleichen Netzwerk. lassen Sie uns also sagen, dass der computer, auf dem die server-Anwendung ist das hören von neuen verbindungen auf port 2121 und es hat die LAN-ip-Adresse 192.168.0.120. Auf einem anderen computer mit der client-Anwendung kann ich eine Verbindung einrichten, indem Sie port-Nummer 2121 und die ip-Adresse 192.168.0.120.
Gibt es eine Möglichkeit, alle Computer in einem Netzwerk, werden und lauscht auf port 2121?
Einen Algorithmus, jetzt denke ich ist wie:
-
ip-Adresse des aktuellen Computers und können sagen, es kommt, wie 192.168.0.145.
-
nun höchstwahrscheinlich wird der server lauscht auf ip-Adresse 192.168.0.?
-
dann ping 192.168.0.1 auf port 2121 dann 192.168.0.2 auf port 2121 ... und dann immer weiter.
Ich weiß nicht, ob das Methode ist effizient. zudem könnte es eine Möglichkeit sein, dass der server geschieht, zu hören auf ip-Adresse 192.168.1.x
So, welche änderungen ich machen muss um auf meinem server und-client-Anwendung so, dass der client in der Lage zu finden alle Server lauscht auf port 2121?
- Sind Sie mit der WCF für die Kommunikation und .NET 4 ?
- Warum wollen Sie finden alle Server? Warum tun Sie müssen sogar mehr als eines? Da der load-balancing? Oder als backup, wenn einer von Ihnen ausfällt?
- Ich habe diese Anwendung, wo ich bin in der Lage, synchronisieren von Dateien zwischen Computern. vielleicht hat jemand anderes nutzt meine Applikation und zwei Server, die zufällig auf dem gleichen Netzwerk. Ich will einfach nur, es zu machen es einfach für die Nutzer in der Lage sein, um den server suchen...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Des Algorithmus vorgeschlagen, die Sie brauchen. Ein problem besteht in der dynamischen Generierung der Kandidaten IP-Adressen.
Normalerweise der möglichen IP-Adressbereich ist die eine, die von der Teilnetz-Maske ( http://en.wikipedia.org/wiki/Subnetwork ). Genauer, der Teil der IP, der zu ändern ist, dass ein Teil, wenn in der Subnetzmaske, die Sie haben 0bits (immer am Ende der Maske).
In deinem Beispiel:
192.168.0.*.
Nur andere Möglichkeiten, die Ihr problem verursachen, die ich sehe, haben diese drei Bereiche sind:
Immer wieder auf das problem zu finden, das problem zu überprüfen, ob "etwas" hört auf einen bestimmten port, den ICMP-Protokoll ist nicht die beste hier, da die meisten firewalls filtern den broadcast ICMP und einzelne ICMP. , Wenn wir wirklich die Rede von einem server, die Chancen sind Sie hatte manuell den port öffnen, den Sie suchen. Auch, , selbst wenn alle Computer reagieren, Sie wissen immer noch nicht, wenn Sie hosten Ihre gewünschte Dienstleistung.
Die folgende Lösung bezieht computing ist die Palette der möglichen Kandidaten IP-Adressen. Danach Sie Durchlaufen, Sie zu sehen, wenn Sie eine Verbindung zu Ihrem Anschluss.
In dieser Implementierung, test ich nacheinander, und das erweist sich als sehr langsam, da der timeout für eine Verbindung ist 30 Sekunden, wenn der host nicht auf. Für mehrere hundert Kandidaten, es klingt nicht allzu gut. Allerdings, wenn die Mehrheit der host verfügbar sind (auch wenn Sie nicht als host Ihren Dienst), wird alles um ein Vielfaches schneller.
Können Sie verbessern Sie das Programm, indem Sie entweder herausfinden, wie Sie diesen Rückgang-timeout (ich konnte nicht herausfinden, wie in meiner vorgegebenen Zeit) oder verwenden Sie eine benutzerdefinierte timeout, wie Sie in Konfigurieren socket connect timeout . Sie können auch multi-threading und hinzufügen die Adresse, die gearbeitet, in eine thread-sichere collection und arbeiten von dort aus.
Auch, könnten Sie versuchen, Ping (ICMP) vor, aber Sie konnte miss gültige Server.
(sorry für mein schlechtes Englisch) ich bin eigentlich braucht etwas ähnlich wie diese, und gerade herausgefunden, über multicast. Hier finden Sie einen Artikel und Beispiel. Die Beispiel-app aus dem Artikel gearbeitet fein auf meinem lan. Ich weiß nicht genau, wie es funktioniert, aber vielleicht können Sie multicast etwas von dem client und dem server(s) reagiert mit seiner IP? Oder wenn das nicht funktioniert, haben die server multicasting seine IP in einem festgelegten Intervall sollte es tun. Sorry für die fehlenden Infos, ich habe gerade dazu gelernt 🙂
Eine option, ich bin nicht zu sehen seien, die hier diskutiert wird, um einen Master-Server.
Die Idee ist ganz einfach: Ein server, auf dem Ihre Anwendung-server registrieren kann, und wo Sie Anwendungs-clients erhalten eine Liste von aktiven Servern.
Dinge im Auge zu behalten:
Wenn jeder server ist so gut wie jede andere für deine Anwendung, würde ich raten, die Liste geordnet nach timestamp des letzten hello-Nachricht empfangen, die auf dem server - so dass der Klient an der Spitze der Liste der server die meisten likelly noch nach oben (da es berichtet, seien bis zuletzt) und kann nach unten gehen die Liste subsequentially.
Mehr über, jedes mal, wenn der Master-Server empfängt eine Hallo, die Liste verändert, so dass jeder so oft von client-Anfragen erhalten eine andere server Liste und verwenden Sie einen anderen preferencial server, Linderung Belastung auf den Servern quer durch den Vorstand.
kann Sie nicht verwenden die gleiche Methode, wie wenn Sie Ihre ip-Adresse.
lassen Sie den Kunden senden Sie ein broadcast - wenn keine Antwort warten,
server erhalten die Sendung und senden Sie zurück mit Ihrer eigenen ip-Adresse.
nun der client wissen, dass der server draußen ist und auf welche ip.
Ich nehme an, Sie haben einen einzigen server. Wenn Sie garantieren können, dass der server-Standort (ip-Adresse und port) konstant ist (oder kann nachgeschlagen werden), dann ist jede client-Anwendung kann auf 'registrieren', mit dem server eine Verbindung auf und informiert den server über die ip-Adresse und lokaler port zurück zu fordern.
ICMP-Ping-Test nicht festzustellen, ob ein computer lauscht auf einem bestimmten port nur, wenn der computer konfiguriert ist, als Reaktion auf ein ping. ICMP ist ein Protokoll, anders als bei TCP oder UDP. Es ist nur für Sie wäre zu bestimmen, ob eine IP-Adresse verwenden, und selbst dann ist immer weniger rentabel.
Haben Sie zwei Möglichkeiten.
Den client ständig zu überprüfen jede IP-Adresse in Ihrem lokalen Netzwerk, und versuchen Sie, öffnen Sie port 2121. Dies ist nicht eine gute option.
Haben alle server senden eine ICMP-ping an die broadcast-Adresse, mit spezifischen Daten, die der Ankündigung, es ist auf (und Optional keine Verbindung zu einem client) die nie jeder so oft (ich würde empfehlen, eine minute für die Prüfung, und 5 Minuten minimum für die Produktion). Alle Ihre software zu tun hat, ist Blick für die broadcast-ping und die Verbindung zu dem Absender-IP-Adresse.
Update:
können Sie stellen Sie den server schickt seinen Standort an einem bestimmten port mit UDP und der client hört es dann der client eine Verbindung mit dem server auf der Basis von ip und port.