Как я могу использовать сокет ipv4 при использовании Java 6 в Linux?

Я пытаюсь написать небольшое Java-приложение для чтения содержимого файла pcap (из Wireshark) и воспроизведения данных в сети в Linux-окне. Файл будет содержать только широковещательные пакеты UDP, поэтому моему приложению действительно нужны только временная метка, номер порта и данные из пакета, чтобы делать то, что мне нужно. Моя проблема в том, что приложение, которое я пытаюсь протестировать с помощью этого кода, прослушивает широковещательные передачи IPv4 UDP в Windows. Мое тестовое приложение продолжает открывать сокет IPv6 для отправки данных.

Я использую netstat -a -u -p, чтобы определить, что это сокет udp6. На окнах я знаю, что это не так.

Каков самый простой или лучший способ заставить тестовое приложение на Linux в java вместо этого открывать сокет udp или udp4? Я не хочу, чтобы меня заставляли каждый раз указывать сетевой адрес ipv4. Я хочу иметь возможность перенести этот код на другую машину, не запоминая, что это некоторая конфигурация, которую нужно изменить.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
10
0
8 491
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Добавьте -Djava.net.preferIPv4Stack = true в свойства среды выполнения вашего Java-приложения.

Вам не кажется, что наличие «сигблока» в вашем ответе - это немного? В конце концов, ваше имя прямо в правом нижнем углу вашего ответа, оно доступно для кликов и все такое ...

unwind 14.11.2008 19:41

Также вы можете использовать эту команду (как root), и вам не нужно будет добавлять параметр -Djava.net.preferIPv4Stack = true в каждое приложение Java:

 # echo 0 > /proc/sys/net/ipv6/bindv6only

Если вы хотите сохранить эту конфигурацию навсегда, вы можете записать ее в каком-нибудь начальном скрипте.

Другие вопросы по теме