如何为 xmpp 实现 smack

Posted

技术标签:

【中文标题】如何为 xmpp 实现 smack【英文标题】:how to implement smack for xmpp 【发布时间】:2020-12-18 21:18:58 【问题描述】:

我正在尝试让我的 android 应用程序能够使用 smack 发送和接收 xmpp 消息,但它不起作用并且连接命令不返回。我看过几个代码示例,但 Smack 有新版本,语法也发生了变化,所以我可能做错了什么:

在我使用的 build.graddle 文件中:

    compile "org.igniterealtime.smack:smack-android-extensions:4.3.0"
    compile "org.igniterealtime.smack:smack-tcp:4.3.0"

我正在尝试从 myaccount321@xabber.org 向 myaccount456@xabber.org 发送消息 我正在尝试使用 hot-chilli.net 进行连接(我不介意使用其他服务器))

在 connection.connect() 之前一切似乎都很顺利,之后脚本不会在不触发任何异常的情况下返回。

请告诉我我做错了什么

TIA

public void sendxmpp()

XMPPTCPConnectionConfiguration config = null;
    try 
        XMPPTCPConnectionConfiguration.Builder configbuilder = XMPPTCPConnectionConfiguration.builder();
        configbuilder.setUsernameAndPassword("myaccount321","myaccount321pw");
                
        DomainBareJid serviceName = JidCreate.domainBareFrom("hot-chilli.net");
        configbuilder.setServiceName(serviceName);
        configbuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
        configbuilder.setHost("jabber.hot-chilli.net");       
        configbuilder.setPort(8222);
        config=configbuilder.build();
        AbstractXMPPConnection connection = new XMPPTCPConnection(config);
        try 
            connection.connect();
             
       catch (SmackException e) 
             e.printStackTrace();
             
       catch (IOException e) 
            e.printStackTrace();
         
       catch (XMPPException e) 
            e.printStackTrace();
         
       catch (InterruptedException e) 
            e.printStackTrace();
        
       connection.login();

       ChatManager chatManager = ChatManager.getInstanceFor(connection);
        
       EntityBareJid jid = JidCreate.entityBareFrom("myaccount321pw@xabber.org");
       Chat chat = chatManager.createChat(jid);
        
       chat.sendMessage("Hello");
        

       
      catch (Exception e) 
        
     
   
    
    

【问题讨论】:

【参考方案1】:

好的,我知道了,连接过程必须在自己的线程中完成。

【讨论】:

以上是关于如何为 xmpp 实现 smack的主要内容,如果未能解决你的问题,请参考以下文章

无法使用教程“使用 Smack 实现基于 XMPP 的应用服务器的 Java 示例”

使用 Smack 的 QuickBlox 服务器端 XMPP 客户端

如何处理 XMPP XEP-0363:客户端使用 SMACK 库的 HTTP 文件上传功能?

使用 xmpp + smack + openfire 在 android 中阻止用户

Android基于XMPP Smack及Openfire学习笔记

如何为 Openfire 实现您自己的(自定义)服务器代码