2012-04-06 16 views
0

Ich entwickle eine LAN-basierte Datenbankanwendung. Es beinhaltet eine zentrale "Server" -App für die Datenbank und viele "Client" -Anwendungen, die darauf zugreifen.LAN-basierte App - Wie verbindet man sich ohne statische IP?

Der "Server" wird ein einfacher C# -basierter HTTP-Server sein, der auf GET- und POST-Anfragen antwortet. Da es jedoch so konzipiert ist, dass es von jedem Laptop im Netzwerk ausgeführt werden kann, frage ich mich, wie ich die Verbindung zwischen Clients und dem Server herstellen kann, ohne die IP-Adresse zu kennen.

Ich nehme an, ich könnte jede IP-Adresse von 192.168.0.0 bis 192.168.0.255 ping und dann diejenigen, die geantwortet haben, um zu sehen, ob irgendwelche sind mein Server. Aber ich würde das nur tun, wenn es keinen besseren Weg gibt. Irgendwelche Vorschläge?

+0

http://en.wikipedia.org/wiki/Broadcast_address –

+0

Sie könnten den Dienst sich anmelden lassen, weitere Details zu Ihrem Netzwerk wären hilfreich, um diese Frage zu beantworten. Was weist die IP-Adressen zu? Ist das eine Windows-Domain? Haben Sie einen lokalen DNS-Server? – Derrick

+0

Das Netzwerk ist einfach ein Router verbunden mit ein paar PCs und Laptops .. kein DNS-Server. – user1032657

Antwort

1

Viele dieser Arten von Discovery-Diensten werden ausgeführt, indem eine Art von Beacon auf der Subnetz-Broadcast-Adresse (für 192.168.0.0/24 wäre es 192.168.0.255) oder durch Ausgeben eines Beacons für eine Multicast-Adresse ausgegeben wird.

Multicast ist besonders interessant, da es in einem ordnungsgemäß konfigurierten Netzwerk Hosts ermöglicht, den Dienst auch über Subnetze hinweg zu finden. Router und Switches leiten Broadcast-Pakete im Allgemeinen nicht über Subnetzgrenzen hinaus, sondern Multicast-Pakete.

Der Beacon hätte Informationen wie den Port, auf dem der Dienst ausgeführt wird, welche Art von Dienst es ist, was immer benötigt wird, um den Dienst zu verwenden.

+0

Danke - das hat mich gleich zur Antwort geführt. Ich habe eine UDP-Übertragung versucht, aber wie Sie vorgeschlagen haben, hat es über meinen Router nicht funktioniert. Multicasting ist genau das, was ich tun musste: http://www.jarloo.com/c-udp-multicasting-tutorial/ – user1032657

1

Um Sie in die richtige Richtung zu führen, sollten Sie den Datenbankserver auf einem bestimmten Port ausführen lassen. Senden Sie dann eine broadcast an diesen Port vom Client (das System muss eine Verbindung zur Datenbank herstellen). Wenn der Datenbankserver dies empfängt, kann er auf den Absender antworten, wodurch ein Handshake möglich wird.

Natürlich müssen Sie die Authentizität des Datenbankservers überprüfen (um es zu sichern, es sei denn, Sie machen sich darüber keine Sorgen). Dies kann so einfach sein, wenn der Client 4 Nummern anzeigt, die dann in die Datenbank eingegeben werden müssen, damit die Datenbank die 4 Zahlen an den Client zurücksenden kann, um zu beweisen, dass es der richtige Computer ist (wie die iTunes-Fernbedienung funktioniert) Sie können Zertifikate verwenden (aber das ist ein zu komplexes Thema, das ich richtig abdecken kann).

Danach werden die beiden Computer einander IPs kennen, und Sie sind eingestellt!

Verwandte Themen