je dirais que la meilleure façon est d'utiliser Bonjour/Zeroconf/mDNS pour C#; il y a eu beaucoup de réflexion pour que ça fonctionne bien avec le réseau; IE il pings moins souvent au fil du temps si possible, etc. Il ya Mono.Zeroconf, et j'ai lu il y a un projet .NET plus ancien dans le Apple SDK mais je ne l'ai pas trouvé.
Ainsi, le plus simple serait d'installer Bonjour for Windows, puis obtenir le Windows Binaries for Mono.Zeroconf essayer l'exemple MZClient.exe
laisser tomber le Mono.Zeroconf.dll
et/ou Mono.Zeroconf.Providers.Bonjour.dll
dans vos références de projet et aller.
Quelque chose comme ceci:
var service = new Mono.Zeroconf.RegisterService {
Name = "Use Me for Stuff",
RegType = "_daap._tcp",
ReplyDomain = "local.",
Port = 0024200,
TxtRecord = new Mono.Zeroconf.TxtRecord {
{"I have no idea what's going on", "true"}}
};
service.Register();
var browser = new Mono.Zeroconf.ServiceBrowser();
browser.ServiceAdded +=
delegate(object o, Mono.Zeroconf.ServiceBrowseEventArgs args) {
Console.WriteLine("Found Service: {0}", args.Service.Name);
args.Service.Resolved +=
delegate(object o, Mono.Zeroconf.ServiceBrowseEventArgs args) {
var s = args.Service;
Console.WriteLine(
"Resolved Service: {0} - {1}:{2} ({3} TXT record entries)",
s.FullName, s.HostEntry.AddressList[0], s.Port, s.TxtRecord.Count);
};
args.Service.Resolve();
};
browser.Browse("_daap._tcp", "local");
re: approche par force brute - C'est possible. Vous voulez ** vouloir ** un meilleur moyen. :) Même en utilisant une approche de socket multiple massivement parallèle (conceptuellement similaire à fping), il peut encore prendre plusieurs minutes pour tester tous les nœuds (et tous les ports potentiels) dans un sous-réseau LAN. J'ai du code dans le produit qui fait exactement cela parce qu'il n'y avait pas de meilleur choix pour ce service. Soupir. –