`

解决win7以上系统 java只获取IPv6的问题

 
阅读更多

如果系统中开启了IPV6协议(比如window7),java网络编程经常会获取到IPv6的地址,这明显不是我们想要的结果,搜索发现很多蹩脚的做法是:禁止IPv6协议。其实查看官方文档有详细的说明:

java.net.preferIPv4Stack (default: false)

If IPv6 is available on the operating system the underlying native socket
will be an IPv6 socket. This allows Java(tm) applications to connect too, and
accept connections from, both IPv4 and IPv6 hosts.

If an application has a preference to only use IPv4 sockets then this
property can be set to true. The implication is that the application will not be
able to communicate with IPv6 hosts.

在实际的运用中有以下几种办法可以实现指定获取IPv4的地址:

1. 在java启动命令中增加一个属性配置:-Djava.net.preferIPv4Stack=true

1 java -Djava.net.preferIPv4Stack=true -cp .;classes/ michael.net.TestInetAddress
2  
3 java -Djava.net.preferIPv6Addresses=true -cp .;classes/ michael.net.TestInetAddress

2.在java程序里设置系统属性值如下

1 package michael.net;
2  
3 import java.net.InetAddress;
4  
5 /**
6  * @blog http://www.micmiu.com
7  * @author Michael
8  */
9 public class TestInetAddress {
10  
11     /**
12      * @param args
13      */
14     public static void main(String[] args) throws Exception {
15         // 注释指定系统属性值
16         // System.setProperty("java.net.preferIPv4Stack", "true");
17         // System.setProperty("java.net.preferIPv6Addresses", "true");
18         System.out.println("-------InetAddress.getLocalHost()");
19         InetAddress addr = InetAddress.getLocalHost();
20         System.out.println("HostName := " + addr.getHostName());
21         System.out.println("HostAddress := " + addr.getHostAddress());
22  
23         System.out.println("-------InetAddress.getByName(\"micmiu.com\")");
24         InetAddress addr2 = InetAddress.getByName("micmiu.com");
25         System.out.println("HostName := " + addr2.getHostName());
26         System.out.println("HostAddress := " + addr2.getHostAddress());
27  
28     }
29 }

java.net.preferIPv4Stack=true 运行结果如下

——-InetAddress.getLocalHost()
HostName := Michael-PC
HostAddress := 10.7.246.163
——-InetAddress.getByName(“micmiu.com”)
HostName := micmiu.com
HostAddress := 173.254.28.17

java.net.preferIPv6Addresses=true  运行结果如下

——-InetAddress.getLocalHost()
HostName := Michael-PC
HostAddress := fe80:0:0:0:6518:85da:8690:16eb%13
——-InetAddress.getByName(“micmiu.com”)
HostName := micmiu.com
HostAddress := 173.254.28.17

3.tomcat Web容器

可在 catalina.bat 或者 catalina.sh 中增加如下环境变量即可:
SET CATALINA_OPTS=-Djava.net.preferIPv4Stack=true

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/lang/java/java-net-ipv4-ipv6/

分享到:
评论

相关推荐

    Java实现IPV6地址查询

    在Java编程环境中,实现IPv6地址查询涉及到网络编程和数据库操作。IPv6是互联网协议的第六版,相较...通过理解IPv6地址的结构,掌握ZX公网IPv6库的API,并熟练运用Java面向对象编程,可以构建出高效、可靠的查询系统。

    java对ipv6格式的压缩简化以及解析

    这是本人参照如下http://www.gestioip.net/cgi-bin/subnet_calculator.cgi的IPV6解析网站,自己做java的工具类。可以对各种IPV6的格式进行解析。校验。以及对IPV6格式的压缩、以及补全。总之是全网最好用的工具类

    联想工程师专用小工具 win7禁用IPv6及其组件工具V2.01.1

    联想工程师专用小工具 win7禁用IPv6及其组件工具V2.01.1联想工程师专用小工具 win7禁用IPv6及其组件工具V2.01.1联想工程师专用小工具 win7禁用IPv6及其组件工具V2.01.1联想工程师专用小工具 win7禁用IPv6及其组件...

    IPv6 Java方法 简写转成全写,全写转成简写

    IPv6(Internet Protocol Version 6)是互联网协议的第六版,旨在解决IPv4地址不足的问题,并提供了许多增强功能。IPv6地址由8组16位的十六进制数字组成,每组之间用冒号分隔。一个完整的IPv6地址由32个十六进制数字...

    win7/xp/linux的IPV6安装与设置方法

    对于Windows 7系统,安装IPv6通常是自动进行的,因为自Windows Vista起,IPv6就已经内置在操作系统中。如果发现IPv6功能未启用,可以通过以下步骤手动开启: 1. 打开“控制面板”,选择“网络和共享中心”。 2. 在...

    win7系统ipv6协议设置

    在探讨“Win7系统IPv6协议设置”的过程中,我们不仅会深入理解IPv6的基本概念及其在Windows 7操作系统中的配置方法,还会分析为什么正确的IPv6协议设置能够提升计算机的网络性能,尤其是下载速度。 ### IPv6简介 ...

    java IPv6缩写和非缩写转化方法类

    类中completionIpV6()为补全缩写ipv6,simplifyIpV6()为将全ipv6转化为缩写

    win7的ipv6设置相关

    在某些情况下,关闭UAC可以帮助解决问题。你可以在控制面板的“用户账户和家庭安全”中找到“用户账户”,然后取消“打开UAC用户账户控制”的选中状态,重新获取IPv6地址。 2. **禁用杀毒软件保护**: 如果关闭UAC...

    WIN7禁止IPV6

    IPv6,全称Internet Protocol Version 6,是互联网协议的第六版,是为了解决IPv4地址枯竭问题而设计的。IPv4采用32位地址,最多只能提供约43亿个唯一的IP地址,而IPv6则采用了128位地址,理论上可以提供近乎无限的...

    联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1(1)

    联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1(1)联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1(1)联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1(1)联想工程师专用小工具 启用win7...

    在Win7系统下抛出java.net.SocketException的解决办法

    ### 在Win7系统下抛出java.net.SocketException的解决办法 #### 问题背景及原因分析 在使用MyEclipse开发工具结合JBoss服务器进行项目开发的过程中,遇到一个常见但令人头疼的问题:当启动JBoss服务器时,控制台...

    配置虚拟机动态获取IPV6

    配置虚拟机动态获取IPV6

    用于获取本机的ipv6地址,自动复制到粘贴板!win7和win10单网卡下测试通过。

    主要用来通过frp之类的路由中转的办法远程唤醒电脑并mstsc后,得到本机的ipv6地址...随手用bat写的,只能用于win系统,且只在单网卡电脑上测试过。有多网卡的不一定能得到正确的ipv6地址,那就自己改改吧,就几行代码。

    win7下设置ipv6

    win7下设置ipv6的bat文件。可以自动执行。不需要采用cmd窗口,方便快捷~

    win7ipv6拨号软件

    win7快速上ipv6,前提是本地网络配置了ipv6的基础

    联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1

    联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1联想工程师专用小工具 启用win7所有隧道接口的IPv6V1.91.1联想工程师专用小工具 启用win7所有隧道...

    如何在win7旗舰版电脑中禁用IPv6协议?.docx

    实际上,在大多数情况下,IPv6 协议并不是必需的,禁用它可以优化 Win7 旗舰版系统的性能。 什么是 IPv6 协议? IPv6 协议是Internet 协议第 6 版本,旨在解决 IPv4 地址空间不足的问题。IPv6 使用 128 位地址空间...

    Web应用IPv6升级改造的主要工作.docx

    目前市场上几乎所有主流的操作系统和服务器软件都支持 IPv6,对原有基础软件进行升级几乎不会存在问题。 3. 主机运营商提供 IP V6 地址:网站 IPv6 改造最主要的还是需要主机运营商的支持,需要提供和分配 IPv6 的...

    IPv6地址格式校验,压缩,补全,以及进制转换

    自己做的Java工具类。可以对IPv6地址的格式进行校验,对IPv6地址的压缩、补全,以及从16进制转换为2进制和从2进制转换为16进制。

    信息系统的IPV6应用

    信息系统的IPV6应用是目前网络技术中的一项重要革新,主要是因为传统的IPV4地址已经无法满足现代互联网的需求,而IPV6作为下一代互联网协议,提供了几乎无限的地址空间,同时还引入了一系列新的功能和改进。...

Global site tag (gtag.js) - Google Analytics