使用Java 6,在linux上如何确保使用ipv4套接字?

使用Java 6,在linux上如何确保使用ipv4套接字?,java,linux,networking,jdk1.6,Java,Linux,Networking,Jdk1.6,我正在尝试编写一个快速的小java应用程序来读取pcap文件(来自Wireshark)的内容,并在linux机器上在网络上播放数据。该文件将只包含UDP广播数据包,因此我的应用程序实际上只需要时间戳、端口号和数据包中的数据来完成我需要的工作。我的问题是,我试图用这段代码测试的应用程序正在侦听Windows上的IPv4 UDP广播。我的测试应用程序不断打开IPv6套接字以发送数据 我正在使用netstat-a-u-p确定套接字是udp6套接字。在windows上,我知道它不是 强制linux上的j

我正在尝试编写一个快速的小java应用程序来读取pcap文件(来自Wireshark)的内容,并在linux机器上在网络上播放数据。该文件将只包含UDP广播数据包,因此我的应用程序实际上只需要时间戳、端口号和数据包中的数据来完成我需要的工作。我的问题是,我试图用这段代码测试的应用程序正在侦听Windows上的IPv4 UDP广播。我的测试应用程序不断打开IPv6套接字以发送数据

我正在使用
netstat-a-u-p
确定套接字是udp6套接字。在windows上,我知道它不是


强制linux上的java测试应用程序打开udp或udp4套接字的最简单或最好的方法是什么?我不想每次都被迫提供ipv4网络地址。我希望能够将此代码移动到另一台机器上,而不必记住它们的配置需要更改。

添加-Djava.net.preferIPv4Stack=true到Java应用程序运行时属性。

您也可以使用此命令(作为根用户)并且您不需要在每个java应用程序中添加-Djava.net.preferIPv4Stack=true参数:

 # echo 0 > /proc/sys/net/ipv6/bindv6only
如果你想永远保持这个配置,你可以在一些初始脚本中编写它。

你不觉得答案中有一个“sigblock”有点过分吗?毕竟,你的名字就在你答案的右下角,可以点击。。。