java.net.UnknownHostException異常的一般原因及解決步驟
UnknownHostException 一般原因
UnknownHostException
是Java編程中常見的一個網(wǎng)絡(luò)異常,通常在試圖通過域名查找并連接到一個主機(jī)時拋出。這個異常的主要原因有以下幾點(diǎn):
1、DNS解析失?。?/strong> 當(dāng)Java程序嘗試將一個域名轉(zhuǎn)換為IP地址(即執(zhí)行DNS解析過程)時,如果DNS服務(wù)器無法找到與該域名對應(yīng)的IP地址,則會拋出此異常。這可能是由于:
- 域名拼寫錯誤或格式不正確。
- DNS服務(wù)器本身的問題,如宕機(jī)、配置錯誤或緩存過期等。
- 網(wǎng)絡(luò)問題導(dǎo)致DNS查詢請求無法到達(dá)DNS服務(wù)器。
2、本地hosts文件配置問題: 在某些情況下,操作系統(tǒng)會先查看本地的hosts文件來解析域名。
如果hosts文件中沒有對特定域名的映射,或者映射的IP地址不正確,也會導(dǎo)致此異常。
3、網(wǎng)絡(luò)連接中斷或受限: 網(wǎng)絡(luò)連接存在問題。
例如防火墻阻止了DNS查詢請求,或者網(wǎng)絡(luò)連接完全斷開,都會使得DNS解析無法完成。
4、目標(biāo)主機(jī)不存在或不可達(dá):
所要訪問的主機(jī)已下線、遷移或尚未啟動服務(wù),因此DNS系統(tǒng)中找不到對應(yīng)的記錄。
5、臨時DNS解析延遲:
DNS更改傳播到全球所有DNS服務(wù)器需要時間,新注冊的域名或最近修改的DNS記錄可能在短時間內(nèi)不能被所有地方正確解析。
在開發(fā)環(huán)境中,有時可以暫時直接在本地hosts文件中添加域名和IP地址的對應(yīng)關(guān)系以快速測試功能。在服務(wù)器發(fā)送求時,就會 自動把域名轉(zhuǎn)成IP 進(jìn)行調(diào)用了。
解決步驟
以CSDN的域名為例(www.csdn.net)
第1步:用有互聯(lián)網(wǎng)的機(jī)器 win+r
→ cmd
進(jìn)入dos窗口
第2步:執(zhí)行 nslookup www.csdn.net
命令,獲取www.csdn.net
域名對應(yīng)的IP
,
C:\Users\zhang>nslookup www.csdn.net 服務(wù)器: public1.114dns.com Address: 114.114.114.114 非權(quán)威應(yīng)答: 名稱: 55cb88f4.csdn.net.cname.yunduns.com Address: 123.129.227.28 Aliases: www.csdn.net
第3步:打開hosts文件Windows:一般在C:\Windows\System32\drivers\etc\hosts
Linux:一般在/etc/hosts
第4步:修改hosts文件,把域名和IP寫到hosts文件中,用于把域名解析成IP
第5步:執(zhí)行 ipconfig/flushdns 清除DNS緩存
第6步:完成,這樣就可以調(diào)到CSDN域名下的接口了。如https://www.csdn.net/xxx/login
常見場景
網(wǎng)絡(luò)請求:
當(dāng)你嘗試使用HttpURLConnection、HttpClient等工具通過域名發(fā)起HTTP/HTTPS請求時,如果DNS無法解析目標(biāo)域名的IP地址,則會拋出此異常。
URL url = new URL("http://unresolved-domain.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 此處可能會拋出UnknownHostException
數(shù)據(jù)庫連接:
在JDBC中,如果你提供的數(shù)據(jù)庫URL是一個域名而非IP地址,并且該域名無法被DNS解析,那么在建立數(shù)據(jù)庫連接時也會拋出此異常。
String url = "jdbc:mysql://unresolved-db-server:3306/mydatabase"; Connection conn = DriverManager.getConnection(url, "username", "password"); // 此處可能會拋出UnknownHostException
Socket通信:
在直接使用Socket進(jìn)行TCP/IP通信時,如果需要通過域名創(chuàng)建Socket連接,而域名未解析成功,同樣會觸發(fā)這個異常。
try { InetAddress address = InetAddress.getByName("unresolved-domain.com"); } catch (UnknownHostException e) { System.out.println("Failed to resolve the host."); }
服務(wù)發(fā)現(xiàn)與調(diào)用:
在微服務(wù)架構(gòu)中,客戶端可能依賴于服務(wù)注冊中心(如Eureka、Consul)獲取其他服務(wù)的地址,如果獲取到的地址是未解析成功的域名,后續(xù)進(jìn)行遠(yuǎn)程服務(wù)調(diào)用時也會遇到這個問題。
總結(jié)
到此這篇關(guān)于java.net.UnknownHostException異常的一般原因及解決步驟的文章就介紹到這了,更多相關(guān)java.net.UnknownHostException異常解決內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot + MyBatis Plus 高效開發(fā)實(shí)戰(zhàn)從入
本文將詳細(xì)介紹 Spring Boot + MyBatis Plus 的完整開發(fā)流程,并深入剖析分頁查詢、批量操作、動態(tài) SQL、樂觀鎖、代碼優(yōu)化等實(shí)戰(zhàn)技巧,感興趣的朋友一起看看吧2025-04-04SpringCloud Netfilx Ribbon負(fù)載均衡工具使用方法介紹
Ribbon是Netflix的組件之一,負(fù)責(zé)注冊中心的負(fù)載均衡,有助于控制HTTP和TCP客戶端行為。Spring Cloud Netflix Ribbon一般配合Ribbon進(jìn)行使用,利用在Eureka中讀取的服務(wù)信息,在調(diào)用服務(wù)節(jié)點(diǎn)時合理進(jìn)行負(fù)載2022-12-12SpringBoot多環(huán)境配置及配置文件分類實(shí)例詳解
這篇文章主要介紹了SpringBoot多環(huán)境配置及配置文件分類,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-10-10mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼
這篇文章主要介紹了mybatis中insert主鍵ID獲取和多參數(shù)傳遞的示例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03mybatis中的擴(kuò)展實(shí)現(xiàn)源碼解析
這篇文章主要介給大家紹了關(guān)于mybatis中擴(kuò)展實(shí)現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-01-01SpringBoot使用Nacos配置中心的實(shí)現(xiàn)
這篇文章主要介紹了SpringBoot使用Nacos配置中心的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Java獲取時間差(天數(shù)差,小時差,分鐘差)代碼示例
這篇文章主要介紹了Java獲取時間差(天數(shù)差,小時差,分鐘差)代碼示例,使用SimpleDateFormat來實(shí)現(xiàn)的相關(guān)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。2017-11-11SpringBoot中添加監(jiān)聽器及創(chuàng)建線程的代碼示例
這篇文章主要介紹了SpringBoot中如何添加監(jiān)聽器及創(chuàng)建線程,文中有詳細(xì)的代碼示例,具有一定的參考價(jià)值,需要的朋友可以參考下2023-06-06