Клиент-серверное приложение работающее с виртуальной локальной сетью. 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? И если да, то подскажите что именно мне нужно почитать.


Ответы (0 шт):