xmpp学习


下载:

Openfire

服务器:Openfire 4.0.2

客户端:Spark 2.7.7

安装

Openfire安装:

根据提示一直下一步,服务器域名设置为:localhost(ps:如果使用gloox,还是直接用机器名,因为gloox不识别ip);数据库使用内嵌数据库或别的标准数据库。

使用mysql的时候需要注意要用管理员权限打开Openfire,否则会出现如下错误:

HTTP ERROR 500
Problem accessing /setup/setup-profile-settings.jsp. Reason: Server Error Caused by:

安装完成后浏览器登录:http://127.0.0.1:9090

Spark

分别在两台电脑上安装Spark,创建各自用户,互添加好友,然后就可以通信了。

自己实现客户端

使用agsXMPP

很好用,直接到官网下载即可,有详细例子,但是程序运行时调试输出信息中会有

在 System.Net.Sockets.SocketException 中第一次偶然出现的“System.dll”类型的异常

的提示

网上说可能是服务器的问题,暂时没找。

使用gloox

下载gloox

下载地址:https://camaya.net/gloox/download/

gloox 0.9.9.12:http://camaya.net/download/gloox-0.9.9.12.tar.bz2

直接用vs打开gloox.vcxproj即可运行

gloox 1.0.15:http://camaya.net/download/gloox-1.0.15.tar.bz2

直接用vs打开gloox.vcxproj运行会有问题,需要修改一下文件。

以下提供一个可在vs2013中直接运行的gloox

gloox_lib_with_vs2013.rar

svn地址:

gloox-1.0:svn co svn://svn.camaya.net/gloox/branches/1.0

调试例子

  1. 新建一个win32控制台空项目,字符集为多字节
  2. 新建筛选器gloox
  3. 把gloox中src文件夹与config.h.win文件复制到新项目中
  4. 修改src文件夹为gloox,并把其中文件(不包括子目录)添加到筛选器gloox中
  5. 加载gloox文件夹下的examples中例子进行调试

例如:MyGloox2015下MyGloox项目

MyGloox.rar

gloox内存泄露

本人发现不管是直接使用gloox还是自己封装gloox,都会有内存泄露,找了几个版本以及别人写的程序,发现都有内存泄露的问题。

使用libstrophe

libstrophe编译

  1. 下载libstrophe-master.zip

  2. 解压,看看各目录,expat是空的,再下载expat,解压,不需要编译,把.h和.c放到expat\lib下面。

  3. 然后先编译expat,顺利编译出 lib文件、

  4. 再编译libstrophe工程,会提示没有parser.c。看说明文档,libstrophe缺省用的是expat,可选用libxml2,进入src下,看到有parser_libxml2.c和parser_expat.c,很明显,把parser_expat.c改名成parser.c就可以了。编译通过。

  5. 再编译其他例子工程,提示没有va_copy。vc2008时好象没有兼容它,不过也没关系,这问题肯定很多人碰到过,果然随便一google,就有答案了, #define一下就行了。

     #ifndef va_copy
    # ifdef __va_copy
    # define va_copy(DEST,SRC) __va_copy((DEST),(SRC))
    # else
    # define va_copy(DEST, SRC) memcpy((&DEST), (&SRC), sizeof(va_list))
    # endif
    #endif

或者

	#ifndef va_copy
#define va_copy(d,s) ((d) = (s))
#endif
  1. 全部编译通过,测试登录和发消息,api简洁明了,是目前见过最好用的xmpp库。当然gloox和qxmpp也都很好用,还有libjingle功能更强,各取所需。

个人又遇到一个错误:

1>libstrophe.lib(sasl.obj) : error LNK2019: 无法解析的外部符号 _SCRAM_SHA1_ClientSignature,该符号在函数 _sasl_scram_sha1 中被引用
1>libstrophe.lib(sasl.obj) : error LNK2019: 无法解析的外部符号 _SCRAM_SHA1_ClientKey,该符号在函数 _sasl_scram_sha1 中被引用
1>E:\code\C\Local\xmpp\libstrophe-0.8.8\libstrophe-0.8.8\vs2008\Debug\roster example.exe : fatal error LNK1120: 2 个无法解析的外部命令

此问题需要把sasl.c与auth.c文件

如果还不行请用这个:

libstrophe(可用).rar

可用vs2008与vs2012直接打开

libstrophe文档

http://strophe.im/libstrophe/doc/0.8-snapshot/

xmpp的更多相关文章

  1. 技术笔记:XMPP之openfire+spark+smack

    在即时通信这个领域目前只找到一个XMPP协议,在其协议基础上还是有许多成熟的产品,而且是开源的.所以还是想在这个领域多多了解一下. XMPP协议:具体的概念我就不写了,毕竟这东西网上到处是.简单的说就 ...

  2. iOS XMPP 通信协议实现 图形化直观感受

    第一次随笔,实在不知写点什么有用的东西,那就分享一下本人最近的研究所得吧! 是关于iOS-XMPP-通信协议的实现,具体代码比较复杂,三言两句也实在难表达清楚,网上已有很多关于iOS XMPP协议的讲 ...

  3. (转)C# XMPP客户端与openfire通信(Matrix Xmpp 授权破解教程)

    FROM:http://www.cnblogs.com/crabo/p/CRACK_MATRIX_XMPP.html 如此著名的XMPP , 居然试过jabber-net, agsXmpp,matri ...

  4. XMPP iOS客户端实现三:登录、注册

    1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...

  5. XMPP iOS客户端实现二:xcode项目配置

    1.下载XMPPFramework,下载地址:https://github.com/robbiehanson/XMPPFramework 2.创建项目并将XMPP库引入: 3.添加需要的库文件: 4. ...

  6. Openfire/XMPP学习之——一个简单的Smack样例

    昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...

  7. MAC下的XMPP环境搭建

    实现即时通信有多种方式,下面讲的是Mac下使用XMPP来实现. XML Messages Presence Protocol 可扩展消息处理协议 简单讲就是基于XML语言的点对点即时通信协议  原理: ...

  8. XMPP开发环境配置

    首先配置XMPP开发环境配置需要的软件 先安装xampp-osx-1.8.3-5-installer.dmg 安装成功后launchpad里会多出一个XAMPP(其他),点开里面的manager-os ...

  9. XMPP作为一个工具的意义

    学习XMPP就是拥有位当前应用程序添加实时,推送,社交功能所需的工具.虽然浏览器不支持XMPP通讯,但是我们可以通过BOSH技术解决. 一个XMPP网络包含如下 服务器:为XMPP节提供路由,是否支持 ...

随机推荐

  1. ubuntu如何安装nodejs最新版 本

    如何正确的安装nodejs? 我们可以先安装nvm, git clone https://github.com/creationix/nvm.git ~/.nvm 然后打开 ~/.bashrc ,   ...

  2. vs15 preview5 离线安装包

    1.介绍 vs15是微软打造的新一代IDE,全新的安装方式.官网介绍如下(https://blogs.msdn.microsoft.com/visualstudio/2016/10/05/announ ...

  3. PHP设计模式(七)适配器模式(Adapter For PHP)

    适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作. 如下图(借图): // 设置书的接口 // 书接口 interface BookI ...

  4. 在禅道中实现WORD等OFFICE文档转换为PDF进行在线浏览

    条件: 安装好禅道的服务器 能直接浏览PDF的浏览器(或通过 安装插件实现 ) 文档转换服务程序(建议部署在另一台服务器上)     实现 原理: 修改禅道的文件预览功能(OFFICE文档其使用的是下 ...

  5. Windows cmd 长时间不输出新内容 直到按下ctrl + c 取消或者回车的解决办法

    换了一台新电脑, 在使用 ant 拷贝大量文件的时候 cmd 窗口过了很久没有继续输出新的内容,远远超过平时的耗时, 以为已经卡死 按下 ctrl + c 取消, 这时并没有取消, 而是输出了新内容, ...

  6. ASP.NET Aries JSAPI 文档说明:AR.DataGrid、AR.Dictionary

    AR.Global 文档 1:对象或属性: 名称 类型 说明 DG 对象 DataGrid操作对象 //datagrid集合,根据ID取出DataGrid对象,将Json当数组用. Items: ne ...

  7. 跨平台的 .NET 运行环境 Mono 3.2 新特性

    Mono 3.2 发布了,对 Mono 3.0 和 2.10 版本的支持不再继续,而且这两个分支也不再提供 bug 修复更新. Mono 3.2 主要新特性: LLVM 更新到 3.2 版本,带来更多 ...

  8. SSH免密码登录

    每次用SSH登录服务器都要输入密码,次数多了就觉得有些麻烦,反正是自己个人用的电脑,安全应该有保障,如何能直接登录上去而不需要输入密码呢?其实一句话就讲清楚了:把自己公钥放在服务器上. Linux客户 ...

  9. WebEssentials 在vs2013 update5安装报错的解决方法.

    WebEssentials 最高支持到update4 如果更新到了update5 RC, 则无法直接安装. 解决方法是 1,下载WebEssentials2013.vsix 文件. 2, 安装7zip ...

  10. [Intel Edison开发板] 04、Edison开发基于nodejs和redis的服务器搭建

    一.前言 intel-iot-examples-datastore 是Intel提供用于所有Edison开发板联网存储DEMO所需要的服务器工程.该工程是基于nodejs和redis写成的一个简单的工 ...