以编程方式(不进行字符串匹配)检查 JVM 是否使用 IPV6 或 IPV4
Check programatically (without string-matching) whether using IPV6 or IPV4 for JVM
我想检查是否已将特定应用程序(在本例中为 Matlab)的 JVM 选项设置为首选 IPV4,或者它们是否仍在使用 IPV6。
我知道如何将 JVM 设置为首选 IPV4。就我而言,可以通过添加
行来完成
-Djava.net.preferIPv4Stack=true
到 $MATLABROOT/bin/maci64/.
中的 java.opts 文件
我还可以检查此行是否已通过字符串匹配添加到 java.opts。我已经在这个问题的底部粘贴了我当前的解决方案(一个检查字符串匹配的 Matlab 脚本,如果不存在则添加该行)。
不过,我不知道如何检查首选 IPV4 还是 IPV6 没有字符串匹配。显然这似乎是首选。
有人知道如何在 JVM 中不使用字符串匹配来检查 IPV4 和 IPV6 吗?
这是我当前的解决方案,它取决于字符串匹配:
% OSX platform-specific: revert to IPv4
if (computer('arch') == 'maci64')
javaoptspath = fileread([matlabroot '/bin/' computer('arch') '/java.opts']);
k = strfind(javaoptspath, '-Djava.net.preferIPv4Stack=true');
if isempty(k)
setenv('DRAKE_IPV4_SET_MATLABROOT', matlabroot)
setenv('DRAKE_IPV4_SET_ARCH', computer('arch'))
display('Since you are on Mac, we will need to set your JVM to prefer IPV4 instead of IPV6 for MATLAB')
display('Please enter your sudo password below')
! (echo "" | echo "-Djava.net.preferIPv4Stack=true") | sudo tee -a $DRAKE_IPV4_SET_MATLABROOT/bin/$DRAKE_IPV4_SET_ARCH/java.opts
end
end
您可以直接从 Matlab 使用 java.lang.System
class 访问基础 java 系统属性,而无需解析选项字符串。
例如:
ipv4_preferred = java.lang.System.getProperty('java.net.preferIPv4Stack')
如果用户没有设置-Djava.net.preferIPv4Stack=...
,getProperty 的结果将为空-Djava.net.preferIPv4Stack=...
,所以更完整的解决方案可能是:
ipv4_preferred = java.lang.System.getProperty('java.net.preferIPv4Stack');
if isempty(ipv4_preferred)
ipv4_preferred = false;
end
我想检查是否已将特定应用程序(在本例中为 Matlab)的 JVM 选项设置为首选 IPV4,或者它们是否仍在使用 IPV6。
我知道如何将 JVM 设置为首选 IPV4。就我而言,可以通过添加
行来完成-Djava.net.preferIPv4Stack=true
到 $MATLABROOT/bin/maci64/.
中的 java.opts 文件我还可以检查此行是否已通过字符串匹配添加到 java.opts。我已经在这个问题的底部粘贴了我当前的解决方案(一个检查字符串匹配的 Matlab 脚本,如果不存在则添加该行)。
不过,我不知道如何检查首选 IPV4 还是 IPV6 没有字符串匹配。显然这似乎是首选。
有人知道如何在 JVM 中不使用字符串匹配来检查 IPV4 和 IPV6 吗?
这是我当前的解决方案,它取决于字符串匹配:
% OSX platform-specific: revert to IPv4
if (computer('arch') == 'maci64')
javaoptspath = fileread([matlabroot '/bin/' computer('arch') '/java.opts']);
k = strfind(javaoptspath, '-Djava.net.preferIPv4Stack=true');
if isempty(k)
setenv('DRAKE_IPV4_SET_MATLABROOT', matlabroot)
setenv('DRAKE_IPV4_SET_ARCH', computer('arch'))
display('Since you are on Mac, we will need to set your JVM to prefer IPV4 instead of IPV6 for MATLAB')
display('Please enter your sudo password below')
! (echo "" | echo "-Djava.net.preferIPv4Stack=true") | sudo tee -a $DRAKE_IPV4_SET_MATLABROOT/bin/$DRAKE_IPV4_SET_ARCH/java.opts
end
end
您可以直接从 Matlab 使用 java.lang.System
class 访问基础 java 系统属性,而无需解析选项字符串。
例如:
ipv4_preferred = java.lang.System.getProperty('java.net.preferIPv4Stack')
如果用户没有设置-Djava.net.preferIPv4Stack=...
,getProperty 的结果将为空-Djava.net.preferIPv4Stack=...
,所以更完整的解决方案可能是:
ipv4_preferred = java.lang.System.getProperty('java.net.preferIPv4Stack');
if isempty(ipv4_preferred)
ipv4_preferred = false;
end