yo diría que la mejor manera es utilizar Bonjour/Zeroconf/mDNS para C#; se pensó mucho en hacerlo jugar bien con la red; Es decir, suena con menos frecuencia con el tiempo si es posible, etc. Hay Mono.Zeroconf, y he leído que hay un proyecto .NET más antiguo en el Apple SDK pero no lo he encontrado.
lo tanto el más fácil sería instalar Bonjour for Windows, a continuación, obtener la Windows Binaries for Mono.Zeroconf probar el ejemplo MZClient.exe
caer el Mono.Zeroconf.dll
y/o Mono.Zeroconf.Providers.Bonjour.dll
en las referencias del proyecto y listo.
Algo como esto:
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: enfoque de fuerza bruta - Es posible. Usted ** quiere ** una mejor manera. :) Incluso utilizando un enfoque de socket múltiple masivamente paralelo (conceptualmente similar a fping) todavía puede tomar varios minutos probar todos los nodos (y todos los puertos potenciales) en una subred de LAN. Tengo un código en el producto que hace exactamente eso porque no había mejor opción para ese servicio. Suspiro. –