Smack踩坑:ResolutionUnsuccessfulEx

2019-08-26  本文已影响0人  悟笃笃

最近又在搞XMPP聊天模块,遇到了一个关于openfire服务器地址配置的坑,写篇笔记记录下来。
在Android客户端使用Smack设置服务器地址的函数有

问题描述

由于之前服务器地址都是hostName的形式,我的XMPPTCPConnectionConfiguration都是以setHost的形式设置服务器地址。但是最近由于内网解析的问题,后台同事把服务器地址从hostName格式换成IP地址格式。
导致了我的IM模块一直连不上,要命的我根本没有发现这点。看Smack日志一直提示

The following addresses failed: '192.168.0.4:5222' failed because: 
de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for 192.168.0.4.
IN  A yielded an error response NX_DOMAIN, '192.168.0.4:5222' failed because: 
de.measite.minidns.hla.ResolutionUnsuccessfulException: Asking for 192.168.0.4.
IN  AAAA yielded an error response NX_DOMAIN

一开始以为是我的port缓存出现错误,我们的port从5222改成55222。然后用wireshark抓包却发现根本没有192.168.0.4:5222的包,后来仔细看代码才发现是hostName和IP地址之间的区别(看来真的老了老了,脑阔年老失修啊)。

解决办法

判断平台返回的openfire服务器地址是ip地址格式还是hostName格式。下面分享一个判断IPV4格式地址额函数

   private static final String REG = "[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}\\.[\\d]{1,3}";

    private boolean isIp(String serverUrl) {
        return Pattern.matches(REG, serverUrl);
    }

如果服务器返回的IP地址是IPV6格式的话,将正则表达式改改就可以用了
判断了openfire服务器地址格式之后,ip地址格式调用setHostAddress函数,hostName格式调用setHost格式即可。
码代码果然要细心啊黑脸

上一篇 下一篇

猜你喜欢

热点阅读