2016-08-19 162 views
0

我製作了一個程序,它具有使用Netty將消息發送到FCM服務器的功能。我不知道爲什麼這樣做? 「java.nio.channels.UnresolvedAddressException」

我完成了在Windows 7中的測試。

它運行良好。

但solaris不運行此操作。

我在solaris中得到了一個異常代碼。

[ClientHandler.exceptionCaught] Unexpected exception from downstream.java.nio.channels.UnresolvedAddressException 

是發生此異常錯誤後

「[ClientHandler.channelOpen]」

,然後運行到

「[ClientHandler.channelClosed]」

因此,我曾嘗試立即寫入消息到FCM服務器「[ClientHandler.channelOpen]」。

從FCM服務器發送的消息。

並得到另一個異常錯誤。

"java.nio.channels.NotYetConnectedException" 

即知道上述問題發生錯誤。

我不知道爲什麼發生「UnresolvedAddressException」。

我認爲發生這個問題是因爲Solaris防火牆。

如何處理這個問題?

添加到.. ping測試結果

ping 64.233.187.188 
64.233.187.188 is alive 

注 - 這個IP是在Java中使用

String ip = "fcm-xmpp.googleapis.com"; 
int port = 5236; 
new InetSocketAddress (ip, port) .getAddress() getHostAddress() 

獲得。

+0

你能使用Linux的命令行運行'挖addressYouAreGoing.to'? – Victory

+0

嗨,是的,我可以做。那我該怎麼辦? – ywoo

+0

它表明地址正在解析嗎?如果沒有,也許你的操作系統沒有合適的DNS服務器。 – Victory

回答

1

隨着我們前進,我會改進此答案。

您似乎有一個錯誤配置的Solaris系統。根據主機名稱查找配置錯誤。

  1. 讓我們知道您的Solaris版本。輸出cat /etc/release和 。

  2. 在Solaris上有一個叫做的野獸Solaris名稱服務守護進程 緩存名稱信息。其他操作系統也有類似的概念。 Solaris中的所有相關係統調用都會詢問此守護程序的名稱爲 的信息,但nslookup工具忽略此信息並直接從DNS服務器詢問 。這就是爲什麼你可以有一個成功的 nslookup,而一般名稱查找不起作用。底線: nslookup有時候不是你想要做的測試。改爲使用getent 命令,如getent hosts fcm-xmpp.googleapis.com

  3. 安德魯亨利的評論是現貨。您應該執行telnet測試。 它提供了有價值的信息。這是一種衆所周知的連接測試方法,它應該是任何IT人員工具箱的一部分,無論您是開發人員還是系統管理員,恕我直言,您都可以使用 。 (視窗人們通常都 不知道「telnet測試」主要是因爲微軟已經決定telnet client should no longer be installed by default on Windows

+0

謝謝您的回答。 我檢查「telnet」,並沒有防火牆問題。 也許它可以解決代碼問題。 如果我工作在不同的操作系統(窗口,solaris)測試,每個結果可能會有所不同? – ywoo

+0

我找到了一個方法。 這是Java代碼的問題。 InetSocketAddress無法識別主機信息。 所以調用getAddress它會返回null。 所以我改變了主機信息。 host =「fcm-xmpp.googleapis.com」>>> host =「64.233.187.188」 InetSocketAddress偶爾會認爲無法識別主機信息。 – ywoo

+0

是的,你的Java問題是'new InetSocketAddress(「fcm-xmpp.googleapis.com」,port)'返回一個未解析的對象,但這是*症狀*。 *原因*是在此特定Solaris主機上的主機名解析存在一些問題。您偶爾使用「偶爾」這個詞來解釋這個問題,所以我假設該主機上的主機名解析只是偶爾發揮作用。長期來看,你應該解決這個問題。短期來說,你可以像你一樣做。 – peterh

相關問題