Для работы в сети Windows имена компьютеров должны быть уникальными, поэтому достаточно вызвать API GetComputerName и иметь имена подкачки клиента и сервера (и сравнить полученное имя с именем, которое они видят). Если клиент и сервер могут запускаться независимо друг от друга, вам понадобится какой-то протокол для этого процесса. Логично, что клиент инициирует обмен, а сервер отправляет свое имя только тогда, когда он получил имя от клиента. Затем клиент может прервать соединение, если видит то же имя.
Я полагаю, что большинство систем виртуальных машин позволят виртуальной машине иметь собственное имя, поэтому у вас все еще должна быть возможность проводить тестирование на виртуальных машинах. Однако у меня нет большого опыта применения всех технологий виртуализации, поэтому не могу сказать наверняка.