`

openfire+spark+smack实现即时通讯

    博客分类:
  • XMPP
阅读更多

最近公司项目需要用到即时通讯功能,经过调研发现openfire+spark+smack可以实现。在网上找了很久,资料都十分有限,即使有些朋友实现了也说的不清不楚。于是决定自己研究,耗时一周的时间实现了文字通讯和文件传输的功能。现发帖分享给有需要的朋友,也希望大家能够把自己的资料都分享出来,不要敝扫自珍。

废话说够了,现在开始上干货:

1.openfire是什么?
openfire是一个即时通讯服务器,也称之为即时通讯平台。它是基于XMPP协议的,大家所熟悉的通讯软件QQ、MSN和Gtalk等等,其中Gtalk就是基于XMPP协议的实现。
在即时通讯中往往因为需要保存一些状态或者数据所以不能采用点对点通讯,而是需要搭建服务器来转发。
下载地址:http://www.igniterealtime.org/downloads/index.jsp
下载完毕以后根据提示安装、配置,然后访问所配置的服务器地址上的9090端口即可访问官方为我们实现好了的openfire后台管理系统。

2.spark是什么?
spark从本质上来说就是一个运行在PC上的java程序,你可以看成是官方为我们实现好的运行在PC上的客户端,我们只需要下载使用即可。
(当然如果你项目的需求现有的spark无法满足,你可以选择在官方下载spark的源码,对它进行修改)
下载地址:http://www.igniterealtime.org/downloads/index.jsp

3.smack是什么?
smack你可以看成是一套封装好了的用于实现XMPP协议传输的API,它是一个非常简单并且功能强大的类库,给用户发送消息只需要三行代码。
下载地址:http://www.igniterealtime.org/downloads/index.jsp
这里需要强调一点,我们在android上开发用的其实是移植版的类库asmack,而asmack现在在网上流传的版本是有BUG的,在传输文件的时候会报空指针异常。我在这个问题上也是耗时最多的,在网上找了许多网友修改过的版本,都不顶用,最后也是在eoe论坛中找到了靠谱的asmack修订版:
详见:http://www.eoeandroid.com/thread-186418-1-1.html

好了,读到这里,相信你对这套实现思路的一些基本概念已经清楚了,那么请准备好上面的三板斧,下面就开始写代码吧。

文字通讯的重要代码片段:(请注意更换你自己的服务器地址、用户名和密码以及想要访问的用户名)

                                                 // 连接参数
                                                ConnectionConfiguration connConfig = new ConnectionConfiguration("192.168.0.1", 5222);
                                                connConfig.setReconnectionAllowed(true);
                                                connConfig.setSecurityMode(SecurityMode.disabled); // SecurityMode.required/disabled
                                                connConfig.setSASLAuthenticationEnabled(false); // true/false
                                                connConfig.setCompressionEnabled(false);
                                                // 配置服务器
                                                XMPPConnection connection = new XMPPConnection(connConfig);
                                                
                                                try {
                                                        // 连接服务器
                                                        connection.connect();
                                                        // 用户登录
                                                        connection.login("joe", "123456");
                                                        // 向另一个用户发出聊天
                                                        Chat chat = connection.getChatManager().createChat("admin@192.168.0.1/Spark 2.6.3", new MessageListener() {
                                                                // 消息回复函数
                                                                @Override
                                                                public void processMessage(Chat arg0, Message arg1) {
                                                                        
                                                                        System.out.println("Received message: " + arg1.getBody());

                                                                        try
                                                                        {
                                                                                arg0.sendMessage("我已收到");
                                                                        } catch (XMPPException e)
                                                                        {
                                                                                e.printStackTrace();
                                                                        }
                                                                        
                                                                }
                                                        });
                                                        // 发送聊天信息
                                                        chat.sendMessage("Hello!");

文件传输的重要代码片段:(请注意更换你自己的服务器地址、用户名和密码以及想要访问的用户名)

                                                // 连接参数
                                                ConnectionConfiguration connConfig = new ConnectionConfiguration("192.168.0.1", 5222);
                                                connConfig.setReconnectionAllowed(true);
                                                connConfig.setSecurityMode(SecurityMode.disabled); // SecurityMode.required/disabled
                                                connConfig.setSASLAuthenticationEnabled(false); // true/false
                                                connConfig.setCompressionEnabled(false);
                                                // 配置服务器
                                                XMPPConnection connection = new XMPPConnection(connConfig);

                                                try {
                                                        // 连接服务器
                                                        connection.connect();
                                                        // 用户登录
                                                        connection.login("joe", "123456");
                                                        // 准备发送的文件
                                                        File file = new File(PATH);

                                                        FileTransferManager transferManager = new FileTransferManager(
                                                                        connection);
                                                        OutgoingFileTransfer outgoingFileTransfer = transferManager
                                                                        .createOutgoingFileTransfer("admin@192.168.0.1/Spark 2.6.3");
                                                        // 发送文件
                                                        outgoingFileTransfer.sendFile(file, file.getName());

                                                        // 接收文件监听
                                                        transferManager
                                                                        .addFileTransferListener(new FileTransferListener() {

                                                                                public void fileTransferRequest(
                                                                                                FileTransferRequest request) {
                                                                                        try {
                                                                                                // 接收文件
                                                                                                IncomingFileTransfer transfer = request
                                                                                                                .accept();
                                                                                                // 接收文件存放的位置
                                                                                                transfer.recieveFile(new File(PATH));

                                                                                        } catch (Exception e) {
                                                                                                Log.e("RecFile Ex In!",
                                                                                                                e.getMessage());
                                                                                        }
                                                                                }
                                                                        });

                                                } catch (XMPPException e) {
                                                        e.printStackTrace();
                                                }

                                        }

OK,大功告成。最后再附上两个demo的工程文件:

分享到:
评论

相关推荐

    openfire+spark+smack

    Openfire、Spark和Smack是三个与XMPP(Extensible Messaging and Presence Protocol)相关的开源项目,它们在构建即时通讯(IM)系统中扮演着重要角色。XMPP是一种基于XML的网络协议,主要用于实时通讯,包括消息...

    openfire+spark+smack开发流程.pdf

    Smack起到的作用是XMPP传输协议的实现,是OpenFire和Spark之间的媒介。 在开发自己的XMPP IM时,我们可以使用插件扩展的方式来增加新的功能,而不是修改人家的源代码。这样可以使我们的项目架构变得更加灵活和可...

    WebIM(Openfire+Spark+Smack)

    【WebIM(Openfire+Spark+Smack)】是一个在Java领域实现即时通讯(IM)的解决方案,以其稳定性、安全性和高效性而受到推崇。该方案由三个主要组件构成:Openfire作为服务器端,Spark作为客户端,而Smack则负责实现...

    openfire+spark+smack工具.rar

    openfire+spark+smack工具,针对即时消息模拟以及xmpp协议测试有很大的帮助

    openfire+spark+smack开发流程.doc

    Openfire、Spark和Smack是构建XMPP即时通讯(IM)系统的三大核心组件。XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放协议,用于实时通讯和状态传递。IM,即时通讯,如QQ、MSN Messenger和...

    openfire + spark 开发

    Spark、Smack 和 Openfire 是三个开源的 XMPP IM 实现。Spark 是一个基于 Java 的客户端 IM 实现,提供了一些基本的功能和插件架构。Smack 是一个 XMPP 协议的 Java 实现,提供了一套可扩展的 API。Openfire 是一个...

    Android AdXmpp(Openfire+asmack+spark)即时通信-IT计算机-毕业设计.zip

    本项目“Android AdXmpp(Openfire+asmack+spark)即时通信”是针对学生毕业设计的一个经典案例,旨在帮助学生理解并掌握Android平台上即时通信的实现技术。以下将详细解析这个项目的重点内容。 首先,AdXmpp是基于...

    Openfire+Spark

    Openfire+Spark是一个高效的企业级即时通讯解决方案,它结合了Openfire服务器和Spark客户端,两者共同构建了一个基于XMPP协议的实时协作环境。Openfire,作为服务器端,使用Java编程语言,遵循XMPP(Extensible ...

    Android AdXmpp(Openfire+asmack+spark)即时通信

    在Android平台上实现即时通信(Instant Messaging,IM)是一项常见的需求,尤其在社交应用和企业通讯软件中。Android AdXmpp项目结合了Openfire服务器、Asmack库和Spark客户端组件,提供了一种高效的解决方案。本文...

    IM(Spark+Smack+Openfire)开发资料详细说明文档

    开发者可以使用Openfire搭建自己的即时通讯服务器,通过与Spark和Smack配合,实现客户端与服务器的高效连接。 4. **文档说明**: "document"文件夹可能包含的是关于Spark、Smack和Openfire的开发指南、API文档、...

    Android应用源码之AdXmpp(Openfire+asmack+spark)-IT计算机-毕业设计.zip

    总的来说,"AdXmpp(Openfire+asmack+spark)"是一个集成了即时通讯功能的Android应用源码,它不仅适合于毕业设计和论文研究,也是移动开发人员提升技能的宝贵资源。通过深入学习和实践,开发者可以更好地理解和掌握...

    Android AdXmpp(Openfire+asmack+spark)即时通信.rar

    《Android即时通信技术详解——基于AdXmpp、Openfire、asmack与spark的实现》 在移动应用领域,即时通信(Instant Messaging,简称IM)已经成为不可或缺的功能,它为用户提供实时的信息交流体验。本教程将围绕...

    Android XMPP例子(Openfire+asmack+spark)

    Android XMPP例子(Openfire+asmack+spark)是一个典型的基于Android平台的即时通讯(Instant Messaging,IM)应用实现,利用了XMPP协议、Openfire服务器、asmack库以及Spark客户端工具。XMPP(Extensible Messaging ...

    安卓Android源码——AdXmpp(Openfire+asmack+spark)即时通信.zip

    本文将深入探讨基于Android平台的AdXmpp项目,它利用Openfire、Asmack和Spark三大组件实现即时通信功能。下面将详细阐述这些组件以及它们在Android中的应用。 首先,AdXmpp是一个针对Android平台设计的即时通信解决...

    Android AdXmpp(Openfire+asmack+spark)即时通信.zip

    《Android AdXmpp:构建基于Openfire、Asmack与Spark的即时通信系统》 在移动应用开发领域,即时通信(Instant Messaging,简称IM)功能是不可或缺的一部分,它为用户提供实时的信息交流体验。本篇文章将深入探讨...

    精典源码之AdXmpp(Openfire+asmack+spark).rar

    Spark具有用户友好的界面,支持多账户、聊天室、文件传输、隐私设置等特性,常被用作测试Openfire服务器或者作为桌面端的即时通讯工具。 通过分析这个项目,你可以了解到以下知识点: 1. **XMPP协议**:XMPP...

    安卓Android源码——AdXmpp(Openfire+asmack+spark).zip

    【标题】"安卓Android源码——AdXmpp(Openfire+asmack+spark)"是一个针对Android平台的开源项目,它整合了AdXmpp框架,利用Openfire服务器和asmack库来实现XMPP协议的通信功能。这个项目的核心是提供一个在Android...

    AdXmpp(Openfire+asmack+spark).zip

    AdXmpp是一个基于开源即时通讯协议XMPP(Extensible Messaging and Presence Protocol)的项目,它结合了Openfire服务器、asmack库以及Spark客户端,旨在提供一个完整的、可扩展的即时通讯解决方案。XMPP是一种用于...

    Android应用源码之AdXmpp(Openfire+asmack+spark) .rar

    总结起来,AdXmpp项目是一个集成了Openfire、Asmack和Spark的Android应用实例,它展示了XMPP在Android平台上的实现,为开发者提供了一个实践和学习即时通讯技术的平台。通过对源码的深入剖析,我们可以掌握Android...

    AdXmpp(Openfire+asmack+spark)

    总之,AdXmpp项目是一个集成了Openfire、Asmack和Spark的Android XMPP客户端,提供了丰富的功能和学习资源,对于希望涉足即时通讯领域的Android开发者来说,是一个非常有价值的参考资料。通过深入研究这个项目,...

Global site tag (gtag.js) - Google Analytics