解决java网络编程IPv6问题
2017-10-13 14:26
375 查看
转载:http://www.micmiu.com/lang/java/java-net-ipv4-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
2.在java程序里设置系统属性值如下:
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
如果系统中开启了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
123 | java -Djava.net.preferIPv4Stack=true -cp .;classes/ michael.net.TestInetAddress java -Djava.net.preferIPv6Addresses=true -cp .;classes/ michael.net.TestInetAddress |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | package michael.net; import java.net.InetAddress; /** * @blog http://www.micmiu.com * @author Michael */ public class TestInetAddress { /** * @param args */ public static void main(String[] args) throws Exception { // 注释指定系统属性值 // System.setProperty("java.net.preferIPv4Stack", "true"); // System.setProperty("java.net.preferIPv6Addresses", "true"); System.out.println("-------InetAddress.getLocalHost()"); InetAddress addr = InetAddress.getLocalHost(); System.out.println("HostName := " + addr.getHostName()); System.out.println("HostAddress := " + addr.getHostAddress()); System.out.println("-------InetAddress.getByName(\"micmiu.com\")"); InetAddress addr2 = InetAddress.getByName("micmiu.com"); System.out.println("HostName := " + addr2.getHostName()); System.out.println("HostAddress := " + addr2.getHostAddress()); } } |
——-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
相关文章推荐
- 解决java网络编程IPv6问题
- 解决java网络编程IPv6带来的问题方法
- 解决java网络编程IPv6问题
- 解决java网络编程IPv6问题
- Java网络编程获取网页的乱码问题解决
- java 网络编程【7】 如何检测和解决端口冲突问题?
- Java网络编程,有助于解决实际问题,
- java网络编程解决中文乱码问题
- java网络编程____Ajax请求跨域的问题解决
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决(从根源上解决) (转)
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- C/C++与java网络通信问题汇总及解决方法
- Java 编程技术中汉字问题的分析及解决,文件操作
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决
- Java 编程技术中汉字问题的分析及解决,文件操作
- Java 编程技术中汉字问题的分析及解决