簡體   English   中英

連接到有效IP端口時拋出UnknownHostException

[英]UnknownHostException is thrown while connecting to a valid ip port

當我嘗試連接到套接字(有效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留空,我該如何解決此問題!

操作系統: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。 這些是驅動主機名解析緩存行為的屬性:

兩個Java安全屬性控制用於正主機名解析和負主機名解析緩存的TTL值:

networkaddress.cache.ttl指示用於從名稱服務成功查找名稱的緩存策略。 該值被指定為整數,以指示緩存成功查找的秒數。 默認設置是緩存實施特定時間段。 值-1表示“永遠緩存”。

networkaddress.cache.negative.ttl (默認值:10)指示從名稱服務中查找不成功的名稱的緩存策略。 該值被指定為整數,以指示為不成功的查詢而緩存故障的秒數。 值為0表示“從不緩存”。 值-1表示“永遠緩存”。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM