Клиент-серверное приложение работающее с виртуальной локальной сетью. C#
Недавно заинтересовался вопросом как работает "локальный хост" в играх. Допустим есть два компьютера в локальной сети, на одном приложение делает хост, а на другом его (хост) обнаруживает. Причем это работает не только в настоящей локальной сети, но и через виртуальную (эмуляторы по типу Hamachi, Radmin VPN и др.).
В сущности вопрос в следующем - как приложение определяет ip хоста? Я находил много примеров реализации клиент-серверных приложений, где заранее указывается адрес хоста, и конект к этому адресу. Но в описанном выше случае программа ведь сама устанавливает, находит и определяет нужные адреса. Я могу просмотреть все потенциальные адреса вот так:
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (var adapter in interfaces)
{
var ipProps = adapter.GetIPProperties();
foreach (var ip in ipProps.UnicastAddresses)
{
if ((adapter.OperationalStatus == OperationalStatus.Up)
&& (ip.Address.AddressFamily == AddressFamily.InterNetwork)
&& adapter.NetworkInterfaceType != NetworkInterfaceType.Loopback)
{
Console.WriteLine(ip.Address.ToString() + "|" + adapter.Description.ToString());
}
}
}
Догадка к решению проблемы
Возможно нужно сделать так: получить адрес сети, и попробовать пропинговать все возможные адреса в этой сети, соответственно так мы вроде как должны найти сервер. Правильна ли догадка? А если так, то нужно делать хост на 0.0.0.0? Может для этого использовать WCF? И если да, то подскажите что именно мне нужно почитать.