Xmpp 在android中使用smack 4.1.2连接到我的ejabberd服务器时获取SocketTimeoutException
我正在尝试使用android设备上的smack API 4.1.2(无asmack)连接ejabberd服务器。在运行smackClient程序时,我发现以下错误Xmpp 在android中使用smack 4.1.2连接到我的ejabberd服务器时获取SocketTimeoutException,xmpp,ejabberd,smack,Xmpp,Ejabberd,Smack,我正在尝试使用android设备上的smack API 4.1.2(无asmack)连接ejabberd服务器。在运行smackClient程序时,我发现以下错误 java.net.SocketTimeOutException:Failed to connect to abc.example.com/182.*.*.* (on port 5222) after 30000ms,'abc.example.com:5222' failed because java.net.ConnectionExc
java.net.SocketTimeOutException:Failed to connect to abc.example.com/182.*.*.* (on port 5222) after 30000ms,'abc.example.com:5222' failed because java.net.ConnectionException: Failed to connect to abc.example.com/182.*.*.* (on port 5222) after 30000ms
使用同一个android设备连接到同一个ejabberd服务器,使用像xabber这样的xmpp客户端工作正常。所以问题肯定是我写的客户端代码。下面是我的代码片段
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword(userName, password)
.setServiceName("abc.example.com")
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setSendPresence(true)
.build();
connection = new XMPPTCPConnection(config);
connection.connect();
connection.login(userName, password);
我的客户端代码中缺少xabber正在使用的某些内容,因此xabber连接正在使用相同的凭据从同一设备工作
请帮助如果您的示例中没有真实的IP和名称,则很难分辨。但是,我最好的猜测是如何解析IP服务器的地址 您的示例与代码中的服务器(example.com)和服务名称(abc.example.com)似乎存在差异 我猜您的客户机正试图连接到另一台运行XMPP服务器的机器 因此,当您遇到服务器不响应的问题时,需要检查以下事项:
- 检查如何解析域的地址。您可能需要指定另一个与域关联的计算机名。如果这是一个测试域,则可能没有DNS设置,因此您甚至可能需要指定服务器IP(同时仍将客户端配置为使用XMPP域,这是两件不同的事情)
- 在客户端中,记录您尝试连接的IP,以确保这是服务器正在运行的IP
- 如果服务器不在主域服务器上,您甚至可能需要为XMPP C2S服务执行DNS SRV记录查询
- 对我来说,找到解决方案花了好几个小时
我忘了关闭VPN应用程序(快速VPN)。网络隧道是根本原因
并更改网络协议版本属性,如下所示:
选择第一个选项(自动获取DNS服务器地址)。我的经验:我使用了以下代码
DomainBareJid xmppServiceDomain = JidCreate.domainBareFrom("desktop-urvfr83");
//DomainBareJid xmppServiceDomain = JidCreate.domainBareFrom("192.168.1.3");
InetAddress addr = InetAddress.getByName("192.168.1.3");
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
.setUsernameAndPassword("alir", "111111")
.setHostAddress(addr)
.setResource("phonn")
.setXmppDomain(xmppServiceDomain)
.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
.setPort(5222)
.build();
但它无法连接并产生超时连接异常。当我禁用windows防火墙时,它工作正常并已连接 你好Remond,谢谢你的快速回复。由于隐私原因,我无法共享域名,但我发现我手动输入了一个管理员,因为eclipse不允许复制粘贴,所以我在那个里输入了错误。我现在更新了异常。我还编写了一些小代码来显示DNSResolver正在解析正确的地址。
List address=DNSUtil.resolveXMPPDomain(“abc.example.com”,null);如果(address!=null&&address.size()>0){System.out.println(address.get(0).getPort()+“&”+address.get(0.getFQDN());}
输出:5222&abc.example.com。这里会出什么问题?如果您可以在ejabberd上连接到另一个客户端,这既不是ejabberd问题,也不是防火墙问题。问题显然是tcp级别的(没有建立tcp会话)。我能想到的唯一原因是连接的IP地址不正确或端口不正确。Remand,像往常一样,你在现场。我的内部本地ip从192.168.1.4更改为192.168.1.5,因此导致了问题。终于设法使它工作起来了。非常感谢你的帮助谢谢你的好话!