强制Java监听IPv4端口的方法

在支持IPv6的VPS上使用java的ServerSocket类监听某个端口时,通过“netstat -an”命令查看所监听的端口时发现格式是“:::nnn”,这是IPv6的格式,而IPv4的格式是“0.0.0.0:nnnn”,此时如果通过这个VPS的IPv4跟这个端口连接时可能会失败(搞不懂Amazon EC2为什么可以连接),可以在本地用“telnet 12.34.56.78 nnn”来试连接这个端口。

找了好多方法,包含想关掉IPv6功能,但不管是通过VPS的客服还是自己摸索最终都关不掉IPv6功能,没办法只有通过java的强制使用IPv4着手,还真有人碰到此类问题并告知了方法,参考链接在这里


其实就是在运行java时通参数来强制使用IPv4:

java -Djava.net.preferIPv4Stack=true -jar MyJar.jar

经过这么一改,之前自动走IPv6的监听这回就回归IPv4,这样就可以部署Yuchberry之类的玩意了。

PS. 在Linux下配置java sdk的方法:
1. 在/etc/profile结尾加上下面几行

export JAVA_HOME=/usr/share/jdk1.6.0_29
export J2RE_HOME=$JAVA_HOME/jre
export PATH=$J2RE_HOME/bin:$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

2. 执行“source /etc/profile”命令启动配置

Tags:

One Response to “强制Java监听IPv4端口的方法”

  1. 静静说道:

    请教一下,为什么加了博主的参数但还是监听IPv6?
    注意下面的tcp6
    [root@izttha2lhyn6ldz ~]# netstat -an | grep 25565
    tcp6 0 0 0.0.0.0:25565 :::* LISTEN
    [root@izttha2lhyn6ldz ~]#

    服务端参数:
    java -Xmx1024M -Xms1024M -Djava.net.preferIPv4Stack=true -jar spigot.jar

Leave a Reply


提醒: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。请务必注意user必须和评论者名相匹配(大小写一致)。