gloox连接openfire服务器遇到的问题

原创 2015年07月10日 21:45:24

匆匆时光,转眼大学四年就结束了。初入社会,刚刚踏入IT行业不久,以前都是在这个论坛上查看各位大神的技术心得,自己在开发过程中也受益匪浅,但是也发现一个问题就是每个知识点自己搞清楚之后过一段时间回过头去又会有很大的遗忘。其实后来发现就是没有及时的总结,在项目过程中完成任务之后就万事大吉,这样其实对自己的提升也是很慢的。最近利用工作之余,自己初涉Xmpp这一块,其实自己写这篇博客的初衷就是总结一下自己在这个过程中遇到的问题,希望与大家分享。有遇到相同问题的同行可以少走弯路,存在一些技术上的问题也希望大家指正。

Xmpp通信协议自己就不多介绍了,论坛上有很多的介绍,下面我就简单的介绍一下自己完成这个简单的即时通信软件的过程。首先自己先在网上了解了一下Xmpp通信协议,另外就是服务器方面网上使用比较广泛的就是openfire和ejabberd等,至于实现Xmpp协议的开源代码,之前自己在项目中遇到过的比如webrtc上面有一个通信模块libjingle用到的是Xmpp协议,由于webrtc的编译实在让人感到头疼,自己在刚工作不就的一个任务就是编译webrtc源码,首先就是环境的搭建,其实就是源码的下载,google的一整套编译工具,在同步过程中花费了比较长的时间,还需要找一个给力的vpn,现在回想起来还是比较费神的事情。不管是在windows下还是linux下都是比较耗费时间的。当然我们可以单独的编译libjingle这个模块。这里就不多说,最后我采用的是相对来说比较简答的gloox开源代码,从编译到基本接口的学习都不会花很多的时间。从最开始的服务器搭建到文档的阅读以及部分接口的学习到编码完成基本实现功能大概也就三天时间,所以我觉得这是比较好的一套用来练习自己技术的方案。

首先还是介绍一下openfire服务器的搭建,我是在ubuntu下搭建的openfire服务器,这里并没有遇到很多的问题。

具体可以参考:http://www.cnblogs.com/dagehaoshuang/p/4047738.html

1、安装最新版本的Oracle JRE/JDK,使用PPA(personal package archieve)WEBUPD8的方式安装

sudo apt-get install python-software-properties

sudo add-apt-repository ppa:webupd8team/java

sudo apt-get update

如果你正在使用OPenJDK,那么先将它移除以免产生任何的冲突

sudo apt-get remove --purge openjdk*


sudo apt-get install oracle-java7-installer

2、安装mysql数据库。使用apt-get命令安装最新版的mysql 服务器

sudo apt-get install mysql-server

MySQL中为openfire创建一个数据库


sudo mysql -u root p

创建的数据库名称叫做"dbopenfire",然后添加新的用户"openfire"并且密码设置未"openfirepwd"

mysql> CREATE DATABASE dbopenfire CHARACTER SET='utf8';

mysql> CREATE USER 'openfire'@'localhost' IDENTIFIED BY '123456';

mysql> GRANT ALL PRIVILEGES ON dbopenfire.* TO openfire@localhost WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

mysql> quit


3、下载并且安装openfire3.7.1(这里的版本号你可以改成最新的版本号,注意下面的命令也要改)。从openfire官网下载openfire3.7.1deb

wget http://download.igniterealtime.org/openfire/openfire_3.7.1_all.deb

sudo dpkg -i openfire_3.7.1_all.deb

你需要编辑文件/etc/init/d/openfire  的27行。将java-6-sunjava-6-oracle或者java-7-oracle代替

sudo apt-get install rpl

sudo rpl '6-sun' '7-oracle' /etc/init.d/openfire

sudo service openfire start

到这里openfir服务器已经开始运行起来,后边就是需要对openfire服务器进行配置

自己主要遇到的问题还是在gloox源码的使用上面,对于接触C++不久的我来说,确实需要花很多的时间去研究。

首先就是下载gloox的源码,到gloox官网:http://camaya.net/gloox/

gloox源码对于我们初学者来说还是比较简单的,首先就编译来说,我使用的是vs2010进行编译,源码已经包括有vs的工程直接使用vs2010进行编译就可以了,在编译过程中我发现在我的vs2010编译成动态库的过程中出现了一些问题,当然可以解决。这里我就说比较顺利的方式,就是直接编译成静态库。直接一次性通过。默认打开gloox的工程是编译为动态库的,所以我们需要手动将其改为静态库编译。另外就是gloox也有跨平台移植的优点,windows下接口封装好之后我们可以很方便的就移植到android平台进行手机端的开发。

编译完成之后就是对静态库的使用,我们可以进到gloox的源码中src/examples中找到一个用来检测是否能连接成功:

这里我还是说我遇到的问题吧。

log: level: 0, area: 131072, <failure xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><
not-authorized/></failure>
log: level: 2, area: 4, SASL authentication failed!
log: level: 0, area: 262144, </stream:stream>
ft_send: disconnected: 16
auth failed. reason: 7

ce: 18

连接服务器一直断开,查找原因就是SASL authentication failed,证书认证失败,网上也有很多此类问题的解决办法,我们查看gloox的连接之前的源码

      JID jid( "lyj@192.168.15.194/Spark" );
      j = new Client( jid, "lyj123");
      j->registerConnectionListener( this );
      j->disco()->setVersion( "ftsend", GLOOX_VERSION, "Linux" );
      j->disco()->setIdentity( "client", "bot" );
      StringList ca;
      ca.push_back( "/path/to/cacert.crt" );
      j->setCACerts( ca );
      j->logInstance().registerLogHandler( LogLevelDebug, LogAreaAll, this );


加载了证书的,但是就是连接不上,最后我在client对象的接口中找到了一个函数

setSASLMechanisms();

所以再加上这句设置sasl为SaslMechPlain就可以了

j->setSASLMechanisms(SaslMechPlain);

重新连接之后发现:


log: level: 0, area: 262144, <presence from='lyj@localhost/Spark' xmlns='jabber:
client'><priority>0</priority><c xmlns='http://jabber.org/protocol/caps' hash='s
ha-1' node='http://camaya.net/gloox' ver='0RyJmsC2EQAjYmYlhkMGaVEgE/8='/></prese
nce>
connected!!!

好,到这里我们就可以愉快的进行Xmpp聊天软件的开发了。

第一次写博客很多地不足的地方,自己主要还是介绍一下自己遇到的问题。有不足的地方还希望指正。

由于我的服务器是搭建在公网上的,所以我们可以在公网内和对方进行通讯。下面附上我的成果图:


我们可以在openfire服务器上查看到这两个用户的登录信息:


好了,就介绍到这里,当然由于时间关系,还有很多地方没有讲到的,有兴趣的可以大家一起多交流,提升在开发上边的技术水平。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

gloox连接到服务器(一个XMPP的库)

gloox连接至服务器端 在使用gloox之前,有必要先提一下XMPP协议这个东东。 XMPP协议是一个基于互联网的即时通信标准协议。它采用XML技术,以文本的方式传输即时消息。支持动态自定义扩展...

gloox 链接openfire服务器 问题

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/love254443233/article/detai...

gloox登录账号(OPENfire服务器)

#include "stdafx.h" #include "gloox/client.h" #include "gloox/connectionlistener.h" #include "gloox/...

gloox发消息

由于工作忙的原因,竟很久没写下去了,后面得坚持下去。今天主要说一下关于通过gloox如何向远端发消息的实现。Gloox发消息很简单,通过前面的接消息的描述,当需要与远端进行通话时,建立一个Messag...

gloox+openfire+mysql安装配置

1、下载gloox代码编译 下载地址:http://camaya.net/gloox/ 2、安装配置mysql 3、安装配置openfire 4、联调测试...

C#访问openfire服务器之一:服务端的安装、客户端的简介

最近在移动端开发中遇到推送消息、即时通信的需求,以前没有注意过这方面的知识,特别花费一段时间捣鼓了一下,初步实现了c#访问openfire服务器,实现即时通信。特此记录一下,方便与我一般的初涉者参考。...
  • hjp1137
  • hjp1137
  • 2016年02月24日 17:12
  • 997

openfire服务端消息回执插件(接收方离线时的情况),判断用户的在线状态

该插件主要处理当接收方处于离线状态时,服务器端发送回执给客户端。工作原理是首先对消息进行拦截,判断消息类型为chat时,查询接收方是否在线,如果在线直接忽略,如果是离线状态,则将消息存放到离线消息列表...

gloox 链接openfire服务器问题解决办法

今天心情不错,终于解决了链接服务器失败的原因。SASL authentication failed 和Device or resource busy这两个问题整整困惑了我很长很长时间 今天终于解决了。...

gloox连接xmpp服务器

先从官网下载gloox的压缩包。 下载地址:http://camaya.net/glooxd/download/ 因为gloox是个c++的库,所以我用的是visual studio 2013编译的,...

gloox 连接 openfire 使用笔记 --openfire 配置

============================================================博文原创,转载请声明出处电子咖啡(原id蓝岩)=================...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:gloox连接openfire服务器遇到的问题
举报原因:
原因补充:

(最多只允许输入30个字)