gpt4 book ai didi

java - 如何让 JVM 在隔离范围内使用 IPv4 堆栈?

转载 作者:太空宇宙 更新时间:2023-11-04 07:37:15 29 4
gpt4 key购买 nike

我有一个在 JVM/Tomcat 上运行的应用程序,并且它运行的机器都启用了 IPv6 堆栈。我正在尝试向另一台仅支持 IPv4 的计算机发出请求,并且 JVM 始终更喜欢 IPv6 堆栈来发出此请求(我使用 Apache HttpClient 类来发出请求)。

我知道 -Djava.net.preferIPv4Stack=true 属性,但由于我不会在这里讨论的原因,我无法在 JVM 启动时传递它。我什至无法像这样以编程方式设置它(在短时间内):

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

...因为这可能会影响 JVM/Tomcat 实例上运行的其他线程(正如我从 this question 和其他人中了解到的)。

所以问题是,如何使这个单个请求通过 IPv4 堆栈(意味着实际使用 IPv4 接口(interface),而不仅仅是连接到 IPv4 端点)?

我考虑过使用 cURL(通过 exec 或通过 libcurl 绑定(bind)),因为curl 根本不使用 JVM。

还有其他想法吗?

最佳答案

Flexo 提到的这一点是有效的!

最终我意识到真正的问题不是 JVM 会从 IPv6 接口(interface)发出请求,这是不可能的,因为代理只会有一个 DNS 条目(正如 Flexo 指出的那样)。

真正的问题是代理 URL 中的拼写错误,导致 JVM 无法解析代理主机;让我感到困惑的是,该异常是从 Inet6Address 类引发的(可能是因为 JVM 还不知道代理仅是 IPv4)。

我改正了拼写错误!现在代理已正确解析,并且请求是通过 IPv4 发出的。谢谢!

关于java - 如何让 JVM 在隔离范围内使用 IPv4 堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16662896/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com