gpt4 book ai didi

java - 连接到有效 IP 端口时抛出 UnknownHostException

转载 作者:行者123 更新时间:2023-12-01 08:53:31 26 4
gpt4 key购买 nike

当我尝试连接到套接字(有效 ip:port)时,随机抛出 UnknownHostException!

Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);

我们本地应用程序环境的/etc/resolve.conf配置了我们本地名称服务器的ipAddress,使用此配置UnknownHostException随机发生(几乎以50:50的比例)。

但是当resolve.conf的条目被清除并留空时,UnknownHostException永远不会发生,并且套接字连接顺利建立。

我怎样才能解决这个问题,因为不可能将resolve.conf也留空!

OS: CentOS 7

最佳答案

通常您的 resolv.conf 文件由 DHCP 客户端填充。如果您看到此文件的内容,它可能以

开头
; generated by /sbin/dhclient-script

不建议手动编辑此文件。该文件指向一个 DNS(或多个 DNS 服务器),如果您要使用 DNS 解析,则 DNS 中必须存在正确的映射。

在您的示例中,您没有提及 ipAddress 是什么类型的变量。您描述的行为表明您的 ipAddress 变量是一个字符串。这将导致 InetSocketAddress 构造函数尝试主机名解析,这可能会导致您遇到的行为。

我的建议是:

  • 如果您要使用 IP 地址,则应确保 InetSocketAddress 收到 java.net.InetAddress目的。如果您查看此 API 页面,您将看到有 2 个属性可以修改主机名解析缓存的行为。
  • 如果您要在服务器中拥有 IP/主机名映射,另一种方法是编辑/etc/hosts 文件以包含映射。

来自 Java API。这些是驱动主机名解析缓存行为的属性:

Two Java security properties control the TTL values used for positive and negative host name resolution caching:

networkaddress.cache.ttl Indicates the caching policy for successful name lookups from the name service. The value is specified as as integer to indicate the number of seconds to cache the successful lookup. The default setting is to cache for an implementation specific period of time. A value of -1 indicates "cache forever".

networkaddress.cache.negative.ttl (default: 10) Indicates the caching policy for un-successful name lookups from the name service. The value is specified as as integer to indicate the number of seconds to cache the failure for un-successful lookups. A value of 0 indicates "never cache". A value of -1 indicates "cache forever".

希望这有帮助。

关于java - 连接到有效 IP 端口时抛出 UnknownHostException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42211731/

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