2008-11-14 9 views
10

나는 (Wireshark에서) pcap 파일의 내용을 읽고 리눅스 박스의 네트워크에서 데이터를 다시 재생할 수있는 빠른 자바 애플리케이션을 작성하려고한다. 파일에는 UDP 브로드 캐스트 패킷 만 포함되므로, 내 응용 프로그램은 필요한 타임 스탬프, 포트 번호 및 패킷의 데이터 만 필요로합니다. 내 문제는이 코드로 테스트하려고하는 응용 프로그램이 Windows에서 IPv4 UDP 브로드 캐스트를 수신 대기한다는 것입니다. 내 테스트 응용 프로그램은 IPv6 소켓을 열어서 데이터를 전송합니다.자바 6을 사용하면, 리눅스에서 어떻게 ipv4 소켓을 사용할 수 있습니까?

netstat -a -u -p을 사용하여 소켓이 udp6 소켓인지 확인합니다. 창문에서 나는 그렇지 않다는 것을 안다.

java의 Linux에서 테스트 응용 프로그램이 udp 또는 udp4 소켓을 대신 열도록하는 가장 쉬운 방법은 무엇입니까? 매번 ipv4 네트워크 주소를 제공하도록 강요 받고 싶지 않습니다. 이 코드를 변경해야하는 몇 가지 구성임을 기억하지 않고이 코드를 다른 컴퓨터로 옮길 수 있기를 바랍니다.

답변

17

Java 응용 프로그램 런타임 속성에 -Djava.net.preferIPv4Stack = true를 추가하십시오.

+3

답변에서 "sigblock"을 가지고 있다고 생각하지 않습니까? 결국 귀하의 이름은 귀하의 답변의 오른쪽 하단 모서리에 있으며 클릭 가능하고 모든 것이 있습니다 ... – unwind

+0

어떻게 안드로이드에서이 작업을 수행 할 수 있습니까? – user239558

3

또한 당신은 루트로이 명령을 사용할 수 있습니다 그리고 당신은 모든 자바 응용 프로그램에서를 -Djava.net.preferIPv4Stack = true 매개 변수를 추가 할 필요가 없습니다 :이 구성을 유지하려면

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

영원히 당신은 초기 스크립트에서 그것을 작성할 수 있습니다.

관련 문제