К сожалению, это зависит от платформы. Вы можете попробовать связать отправляющий и принимающий сокеты с интерфейсом обратной связи, но пробег будет отличаться Этот прием работает для Windows, немного в зависимости от того, как настроена ваша сеть. Я заставил его работать на SUSE Linux после ряда непонятных изменений параметров, но это было как минимум десять лет назад.
Интерфейс обратной связи является специальным (например, обычно более высокий MTU, чисто встроенный в программное обеспечение, исходящие сообщения перемещаются непосредственно во входящую очередь и т. Д.), Поэтому иногда обычные сетевые правила не применяются.
Одна вещь, которая будет работать равномерно на разных платформах, это использовать физическую сеть и накладывать ограничения на исходящий пакет. Для тестирования я обычно использую хитрость - установить TTL для исходящих пакетов на 1 (MulticastSocket.setTimeToLive(1);
). Таким образом, пакет не сможет пройти ни один маршрутизатор. Кроме того, вам необходимо убедиться, что другие тесты, выполняемые в той же подсети, не мешают вашей. Для этой цели я обычно использую рандомизатор для многоадресного адреса, генерируя адрес между 224.1.1.1 и 239.254.254.254. Это адресное пространство должно быть достаточно большим, чтобы избежать коллизий. Вам также необходимо убедиться, что ваш рандомизатор избегает зарезервированных многоадресных адресов, иначе в вашей среде могут появиться всевозможные странные поведения.
Существует также MulticastSocket.setLoopbackMode(boolean)
, но я обнаружил, что он также зависит от платформы (хотя и не такой серьезный, как использование loopback, и, если честно, это было некоторое время назад, он мог бы работать лучше сейчас), поэтому некоторые может потребоваться настройка ОС.