首頁 > Java > java教程 > 主體

如何解決Java中的UnknownHostException異常?

王林
發布: 2023-04-23 21:01:05
轉載
5222 人瀏覽過

同事新分的測試機resin啟動的時候出現了Java.NET.UnknownHostException異常,問題原因是在系統的 /etc/Hostname中配置了主機名,而在/etc/hosts檔案中沒有對應的配置。簡單的解決方法是對應關係配好就可以,甚至除/etc/Hostname這個檔案也可以。

如何解決Java中的UnknownHostException異常?

深層的原因: 在大多數Linux作業系統中,都是以/etc/hosts中的設定找出主機名稱的,但是 Detian based system用/etc/ Hostname檔案中的設定做主機名稱。

而Java 的InetAddress.java 呼叫 InetAddressImpl.java 的   public native String getLocalHostName() throws UnknownHostException; 來取得本地主機名稱, Javaative 的這個方法是native 配置出現問題的情況下,Java 程式碼出現問題。

hostname 查看本機名稱,

  • 若本機名稱不是一個IP位址, 例如是"sohu",則必須在/etc/hosts中設定 sohu對應本機IP,否則java.net.InetAddress.getLocalHost會拋出java.Net.UnknownHostException異常.

  • 若本機名稱是IP位址,而且必須是本機某塊網路卡的IP, 

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

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

以上是如何解決Java中的UnknownHostException異常?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:yisu.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板