`

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工具.rar

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

    WebIM(Openfire+Spark+Smack)

    Java领域即时通讯的比较好的实现方案之一,稳定,安全,高效!!!

    Openfire_spark_安装手册

    Java领域的即时通信的解决方案可以考虑openfire+spark+smack。当然也有其他的选择。 Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.6.4版本,这个版本是当前最新的版本,而且网上可以...

    openfire3.6.4_spark2.5.8_smack_java即时通信解决方案

    本文介绍基于java的即时通信服务器openfire3.6.4和spark2.5.8客户端产品以及如何使用smack开发java程序与即时通信用户交互,spark除聊天支持外,还支持语音,多人视频,文件传输,截图,远程观看桌面,msn网关...

    基于smack4.1.4 openfire的即时通讯(IM)

    搭建openfire后,用 smack api 连接服务的测试demo。运行官网范例,发现其实不易,smack4.1.4中缺少很多依赖于第3方的jar包。不断debug甚是痛苦,终于跑起来了。分享出来给只是想要个初体验的同学。

    即时通讯 android

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

    Openfire_spark安装手册.pdf

    第一章 JAVA领域的IM解决方案 3 第二章 安装OPENFIRE3.6.4 3 2.1 配置机器的域名 3 2.2 安装OPENFIRE 3 2.2.1 安装 3 2.2.2 运行数据库脚本 4 2.2.3 数据库驱动jar包 6 ...第六章 使用SMACK开发即时通信功能 22

    smack4.3.4+spark2.8.3.zip

    费了九牛二虎之力才从官网下载下来,方便下载。 Smack主要是xmpp协议的实现,提供了一套很好的api,所以下面操作xmpp都是通过使用Smack的api来实现,从...Spark 是IM客户端的实现,其实就是使用了Smack 的api实现的。

    WeChat-app-master .zip

    Openfire+Smack+Spark实现Android端的即时通讯APP(仿微信)。 功能已基本实现完毕,本项目基于Smack 4.1.3,这个版本的smack有很大的改动,网上的Demo很少,基本都是查看API实现的。

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现.

    Android 基于xmpp协议,smack包,openfire服务端的高仿QQ的即时通讯实现。实现了注册,登录,读取好友列表,搜索好友,添加分组,添加好友,删除好友,修改心情,两个客户端之间的信息发送与接收,监听发送来的好友...

    安卓XMPP聊天通讯Socket相关-OpenfireSmackSpark实现Android端的即时通讯APP仿微信。功能已基本实现完毕本项目基于Smack4.1.3这个版本的smack有很大的改动网上的Demo很少基本都是查看API实现的.zip

    Openfire Smack Spark实现Android端的即时通讯APP(仿微信)。 功能已基本实现完毕,本项目基于Smack 4.1.3,这个版本的smack有很大的改动,网上的Demo很少,基本都是查看API实现的.zip,太多无法一一验证是否可用,...

    spark_smack_openfire_讲解

    Smack是一个为使用XMPP服务器聊天和发送即时消息交流而提供的库。 Smack的主要优势: 使用简单且拥有强大的API。向用户发送一条文本消息只需用一下三行代码即可完成 XMPPConnection connection = new ...

    openfire_4_5_3.tar.gz

    openfire4.5.3版本下载!!openfire是基于XMPP协议的即时通讯框架,spark是pc客户端应用,类似qq客户端。smack提供了与XMPP服务通信的开发库。在实际应用中,可以用openfire做二次开发!

    openfire-4.1.4-1.x86_64.rpm

    openfire是基于XMPP协议的即时通讯框架,spark是pc客户端应用,类似qq客户端。smack提供了与XMPP服务通信的开发库。

    android 即时聊天demo

    用的是openfire 的服务器,smack 的jar包,在我这里是可以运行,手机和spark 电脑客户端通信

Global site tag (gtag.js) - Google Analytics