6

我在 Windows 上遇到了 Java 6 的一个已知错误。我的理解是获取网络掩码的正常方法是查找网络前缀长度并进行一些位移。问题是在 Windows 上,前缀长度经常被错误地返回,所以我们得到 128 而我们应该得到 24 或 20。

这个解决方案中,建议放在-Djava.net.preferIPv4Stack=trueJava 命令行上。不幸的是,在 Windows 7 上,将其添加为 VM 参数或 Java 命令行似乎没有任何效果。

(a) 有没有人知道在 Windows 7 上可能仍然有效的此问题的任何其他解决方法?

(b) 或者,是否有完全不同的方法来获得可靠的网络掩码?

谢谢!

PS 这是与此相关的错误报告

4

3 回答 3

3

-Djava.net.preferIPv4Stack=trueVM 选项应该可以在任何操作系统下工作。或者,它可以作为System.setProperty("java.net.preferIPv4Stack","true");. 除非,某些东西(图书馆或其他)正在重置其真实状态。

于 2012-02-20T22:45:02.763 回答
2

下面的代码显示子网掩码。在具有多个网络连接的计算机上(例如具有无线和 Cat-5 以太网连接的笔记本电脑),它可能会写入两次子网掩码,因为客户端可以有两个不同的 IP 地址。

    String os = System.getProperty("os.name");        
    try {
        if(os.indexOf("Windows 7")>=0) {
            Process process = Runtime.getRuntime().exec("ipconfig");
            process.waitFor();
            InputStream commandOut= process.getInputStream();

            BufferedReader in = new BufferedReader(new InputStreamReader(commandOut));
            String line;
            while((line = in.readLine()) !=null) {
                if(line.indexOf("Subnet Mask")>=0) {
                    int colon = line.indexOf(":");
                    System.out.println(line.substring(colon+2));
                }
            }
        }
    catch(IOException ioe) {    }
    catch(java.lang.InterruptedException utoh) {   }

在有线和无线连接都处于活动状态的笔记本电脑上,我得到以下输出:255.255.254.0 255.255.254.0

当我关闭无线连接时,正如预期的那样,我只看到有线以太网链路的一条输出。

于 2012-02-20T05:54:16.230 回答
1

既然我们只是在 Windows 7 中遇到问题,为什么不寻找特定于操作系统的解决方案呢?我知道我们可以从 Java 启动 windows 程序,包括 windows 命令行或 bat 文件。必须有一种方法可以将 ipconfig 的输出重定向到 windows 中的文本文件。您的程序应该能够通过调用 ipconfig 然后读取输出来获取子网掩码。

于 2012-02-19T15:04:40.273 回答