2012-03-27 235 views
31

我需要禁用IPv6。爲此,java文檔指示設置jvm屬性java.net.preferIPv4Stack=true如何在運行時設置java.net.preferIPv4Stack = true?

但我不明白如何從代碼本身做到這一點。

許多論壇都從命令提示符演示了它,但我需要在運行時執行此操作。

+5

禁用IPv6來解決代碼中的一些錯誤只是爲將來存儲麻煩。現在解決真正的問題,並在以後節省自己的頭痛。 – Flexo 2012-03-28 16:39:05

+1

我想知道*爲什麼*您覺得您需要禁用IPv6。有可能是一個合法的原因,但我還沒有看到一個... – 2013-09-16 18:30:32

+4

@BrianKnoblauch您在這裏:[authbind](http://manpages.ubuntu.com/manpages/hardy/man1/authbind.1.html )僅適用於IP4。 – maaartinus 2014-08-13 00:53:11

回答

46

您可以使用System.setProperty("java.net.preferIPv4Stack" , "true");

這相當於通過-Djava.net.preferIPv4Stack=true

+0

獲取的廣播地址仍然是255.255.255.255 – 2012-03-27 02:17:35

+3

這對IPv4來說看起來很正常。這是標準的0.0.0.0網絡廣播地址。 – 2012-03-27 02:22:12

+3

你確定這會工作嗎?從看[源代碼](http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7-b147/java/net/InetAddress.java#InetAddress.0preferIPv6Address)看來,它似乎對我來說'java.net.preferIPv4Stack'只在JVM啓動時纔會被讀取,然後永遠不會再被讀取。可能是錯誤的。 – peterh 2014-02-04 20:58:47

9

在命令行中傳遞給它的另一種方法,如果你絕望,並沒有獲得(一)代碼或( b)命令行,那麼你可以使用環境變量:

http://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-Desktop/html/plugin.html

具體地,對於Java Web Start的設置環境變量:

JAVAWS_VM_ARGS

和用於小應用程序:

_JPI_VM_OPTIONS

例如

_JPI_VM_OPTIONS = -Djava.net.preferIPv4Stack =真

此外,在Windows全局選項(一般Java應用程序)可以在Java控制計劃頁的 「Java」 選項卡下進行設置。

7

我遇到了這個問題,試圖從運行Java 7的Web服務器的Web應用程序中的javax.mail發送郵件。儘管telnet和ping工作在同一主機,但內部郵件服務器目標失敗,出現「網絡不可達」 ,而外部郵件服務器工作。我試過

System.setProperty("java.net.preferIPv4Stack" , "true"); 

在代碼中,但是失敗了。所以參數值可能會被系統緩存。設置VM參數

-Djava.net.preferIPv4Stack=true 

在Web服務器啓動腳本中工作。

還有一點證據:在一個非常小的目標測試程序中,在代碼中設置系統屬性的確有的工作。所以當使用第一個Socket時,參數可能會被緩存,可能不僅僅是JVM啓動。

2

好,

我用System.setProperty("java.net.preferIPv4Stack" , "true");和它與Java的作品,但它並沒有在JBoss AS7工作。

這是我的工作,它的解決方案,

以下行添加到文件$ {JBOSS_HOME} /bin/standalone.conf結束。蝙蝠(只是:JAVA_OPTS_SET後)

set "JAVA_OPTS=%JAVA_OPTS% -Djava.net.preferIPv4Stack=true" 

注:重新啓動JBoss服務器

0

System.setProperty不是爲小程序的工作。因爲JVM已經在applet啓動之前運行。在這種情況下,我們使用的小程序的參數是這樣的:

deployJava.runApplet({ 
     id: 'MyApplet', 
     code: 'com.mkysoft.myapplet.SomeClass', 
     archive: 'com.mkysoft.myapplet.jar' 
    }, { 
     java_version: "1.6*", // Target version 
     cache_option: "no", 
     cache_archive: "", 
     codebase_lookup: true, 
     java_arguments: "-Djava.net.preferIPv4Stack=true" 
    }, 
     "1.6" // Minimum version 
    ); 

您可以在https://www.java.com/js/deployJava.js

0

找到deployJava.js你可以設置環境變量JAVA_TOOL_OPTS像如下,將由JVM的任何應用程序採摘。

集JAVA_TOOL_OPTS = -Djava.net.preferIPv4Stack =真

您可以從命令提示符設置此或系統環境變量設置,根據您的需要。請注意,這將反映到您的機器上運行的所有Java應用程序中,即使它是您在私人設置中使用的Java解釋器。

相關問題