我制作的程序具有使用 Netty 将消息发送到 FCM 服务器的功能。
我在Windows 7中完成了测试。
效果很好。
但是solaris不运行这个。
我在Solaris 中收到异常代码。
[ClientHandler.exceptionCaught] Unexpected exception from downstream.java.nio.channels.UnresolvedAddressException
此异常错误发生在
之后"[ClientHandler.channelOpen]"
然后运行到
"[ClientHandler.channelClosed]"
所以,我确实尝试在立即“[ClientHandler.channelOpen]”之后向 FCM 服务器写入消息。
从 FCM 服务器发送的消息。
并出现另一个异常错误。
"java.nio.channels.NotYetConnectedException"
即知道上面的问题出现了错误。
我不知道为什么会出现“UnresolvedAddressException”。
我认为出现这个问题是因为Solaris防火墙。
如何处理这个问题?
添加到.. Ping测试结果
ping 64.233.187.188
64.233.187.188 is alive
注意 - 该 IP 是通过使用获得的
String ip = "fcm-xmpp.googleapis.com";
int port = 5236;
new InetSocketAddress (ip, port) .getAddress () getHostAddress ()
在java中。
最佳答案
随着我们的进展,我会改进这个答案。
您的 Solaris 系统似乎配置错误。主机名查找方面配置错误。
请告诉我们您的 Solaris 版本。执行
cat/etc/release
并 发布输出。在 Solaris 上,有一种叫做“Solaris 名称服务守护进程”的野兽 它缓存名称信息。其他操作系统也有类似的概念。 Solaris 中的所有相关系统调用都会向该守护进程询问名称 信息,但是
nslookup
工具会绕过这个并询问 直接来自 DNS 服务器。这就是为什么你可以拥有成功的原因nslookup
,而名称查找通常不起作用。底线:nslookup
有时不是您想要做的测试。使用getent
命令,如getent Hosts fcm-xmpp.googleapis.com
。安德鲁·亨利 (Andrew Henley) 的评论非常正确。您应该执行
telnet
测试。 它提供了有值(value)的信息。这是一种众所周知的测试方法 连接性,它应该成为任何 IT 人员工具箱的一部分,无论是 恕我直言,您是开发人员或系统管理员。 (Windows人们通常这样做 不知道“telnet 测试”主要是因为微软已经决定 那telnet client should no longer be installed by default on Windows )
关于java - 我不知道为什么会出现这种情况? "java.nio.channels.UnresolvedAddressException",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39029843/