[英]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構造函數嘗試解析主機名,這可能會導致您遇到的行為。
我的建議是:
來自Java API。 這些是驅動主機名解析緩存行為的屬性:
兩個Java安全屬性控制用於正主機名解析和負主機名解析緩存的TTL值:
networkaddress.cache.ttl指示用於從名稱服務成功查找名稱的緩存策略。 該值被指定為整數,以指示緩存成功查找的秒數。 默認設置是緩存實施特定時間段。 值-1表示“永遠緩存”。
networkaddress.cache.negative.ttl (默認值:10)指示從名稱服務中查找不成功的名稱的緩存策略。 該值被指定為整數,以指示為不成功的查詢而緩存故障的秒數。 值為0表示“從不緩存”。 值-1表示“永遠緩存”。
希望這可以幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.