溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java.Net.UnknownHostException異常處理問題怎么解決

發(fā)布時間:2023-03-31 15:26:59 來源:億速云 閱讀:153 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹了java.Net.UnknownHostException異常處理問題怎么解決的相關(guān)知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇java.Net.UnknownHostException異常處理問題怎么解決文章都會有所收獲,下面我們一起來看看吧。

同事新分的測試機resin啟動的時候出現(xiàn)了Java.NET.UnknownHostException異常,問題原因是在系統(tǒng)的 /etc/Hostname中配置了主機名,而在/etc/hosts文件中沒有相應(yīng)的配置。簡單的解決辦法是對應(yīng)關(guān)系配好就可以,甚至除/etc/Hostname這個文件也可以。

java.Net.UnknownHostException異常處理問題怎么解決

深層的原因: 在大多數(shù)Linux操作系統(tǒng)中,都是以/etc/hosts中的配置查找主機名的,但是 Detian based system用/etc/Hostname文件中的配置做主機名。

而Java 的InetAddress.java 調(diào)用 InetAddressImpl.java 的   public native String getLocalHostName() throws UnknownHostException; 來獲取本地主機名, Java 的這個方法是native的,是本地系統(tǒng)的一個實現(xiàn),所以在本地配置出現(xiàn)問題的情況下,Java 代碼出現(xiàn)問題。

hostname 查看本機名稱,

  • 若本機名稱不是一個IP地址, 比如是"sohu",則必須在/etc/hosts中配置 sohu對應(yīng)本機IP,否則java.net.InetAddress.getLocalHost會拋出java.Net.UnknownHostException異常.

  • 若本機名稱是一個IP地址,而且必須是本機某塊網(wǎng)卡的IP, 

  • 第三種情況比較麻煩。倘若本機名稱是一個IP地址,但不是本機某塊網(wǎng)卡的IP,或者只是某個IP地址的一部分,比如192.168(這是我遇到過的),那么執(zhí)行java.net.InetAddress.getLocalHost().getHostAddress()會得到192.0.0.168,java.net.InetAddress.getLocalHost().getHostAddress()不會拋出異常,但相關(guān)訪問會停滯很久,原因是他在查找192.0.0.168這個地址, 若網(wǎng)絡(luò)中不存在這個地址,最終會拋出Connection timed out異常;若網(wǎng)絡(luò)中存在這個地址,Connection refused to host這個異常將被拋出,這些顯然都不是想要的

結(jié)論:
    1. 設(shè)置本機名稱:hostname mName     xxx最好不是寫IP地址的形式,若寫則必須是本機的完全IP形式(不要只寫一半)
    2. 在/etc/hosts里加一行 本機IP mName
    3. 用InetAddress.getLocalHost().getHostAddress()測試一下結(jié)果是否是與本機IP一致

關(guān)于“java.Net.UnknownHostException異常處理問題怎么解決”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“java.Net.UnknownHostException異常處理問題怎么解決”知識都有一定的了解,大家如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI