2016-08-19 124 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

相关问题