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

深層的原因: 在大多數(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異常處理方法的文章就介紹到這了,更多相關(guān)java.Net.UnknownHostException異常處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在webservice里調(diào)用耗時方法出錯的解決方案
這篇文章主要介紹了在webservice里調(diào)用耗時方法出錯的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
java利用url實現(xiàn)網(wǎng)頁內(nèi)容的抓取
本文主要介紹了java利用url實現(xiàn)網(wǎng)頁內(nèi)容抓取的示例。具有很好的參考價值。下面跟著小編一起來看下吧2017-03-03

