Xmpp 在android中使用smack 4.1.2连接到我的ejabberd服务器时获取SocketTimeoutException

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

我正在尝试使用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.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,因此导致了问题。终于设法使它工作起来了。非常感谢你的帮助谢谢你的好话!