xmpp
xmpp学习
下载:
服务器: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
svn地址:
gloox-1.0:svn co svn://svn.camaya.net/gloox/branches/1.0
调试例子
- 新建一个win32控制台空项目,字符集为多字节
- 新建筛选器gloox
- 把gloox中src文件夹与config.h.win文件复制到新项目中
- 修改src文件夹为gloox,并把其中文件(不包括子目录)添加到筛选器gloox中
- 加载gloox文件夹下的examples中例子进行调试
例如:MyGloox2015下MyGloox项目
gloox内存泄露
本人发现不管是直接使用gloox还是自己封装gloox,都会有内存泄露,找了几个版本以及别人写的程序,发现都有内存泄露的问题。
使用libstrophe
libstrophe编译
下载libstrophe-master.zip
解压,看看各目录,expat是空的,再下载expat,解压,不需要编译,把.h和.c放到expat\lib下面。
然后先编译expat,顺利编译出 lib文件、
再编译libstrophe工程,会提示没有parser.c。看说明文档,libstrophe缺省用的是expat,可选用libxml2,进入src下,看到有parser_libxml2.c和parser_expat.c,很明显,把parser_expat.c改名成parser.c就可以了。编译通过。
再编译其他例子工程,提示没有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
- 全部编译通过,测试登录和发消息,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文件
如果还不行请用这个:
可用vs2008与vs2012直接打开
libstrophe文档
http://strophe.im/libstrophe/doc/0.8-snapshot/
xmpp的更多相关文章
- 技术笔记:XMPP之openfire+spark+smack
在即时通信这个领域目前只找到一个XMPP协议,在其协议基础上还是有许多成熟的产品,而且是开源的.所以还是想在这个领域多多了解一下. XMPP协议:具体的概念我就不写了,毕竟这东西网上到处是.简单的说就 ...
- iOS XMPP 通信协议实现 图形化直观感受
第一次随笔,实在不知写点什么有用的东西,那就分享一下本人最近的研究所得吧! 是关于iOS-XMPP-通信协议的实现,具体代码比较复杂,三言两句也实在难表达清楚,网上已有很多关于iOS XMPP协议的讲 ...
- (转)C# XMPP客户端与openfire通信(Matrix Xmpp 授权破解教程)
FROM:http://www.cnblogs.com/crabo/p/CRACK_MATRIX_XMPP.html 如此著名的XMPP , 居然试过jabber-net, agsXmpp,matri ...
- XMPP iOS客户端实现三:登录、注册
1.创建一个单例模式来管理xmpp的连接和操作 +(XMPPManager *)share { static XMPPManager *_share=nil; static dispatch_once ...
- XMPP iOS客户端实现二:xcode项目配置
1.下载XMPPFramework,下载地址:https://github.com/robbiehanson/XMPPFramework 2.创建项目并将XMPP库引入: 3.添加需要的库文件: 4. ...
- Openfire/XMPP学习之——一个简单的Smack样例
昨天讲了Openfire的搭建和配置,今天来讲一下Smack.如果对如何搭建和配置Openfire的,可以参考Openfire/XMPP学习之——Openfire的安装.配置. Smack是一个开源, ...
- MAC下的XMPP环境搭建
实现即时通信有多种方式,下面讲的是Mac下使用XMPP来实现. XML Messages Presence Protocol 可扩展消息处理协议 简单讲就是基于XML语言的点对点即时通信协议 原理: ...
- XMPP开发环境配置
首先配置XMPP开发环境配置需要的软件 先安装xampp-osx-1.8.3-5-installer.dmg 安装成功后launchpad里会多出一个XAMPP(其他),点开里面的manager-os ...
- XMPP作为一个工具的意义
学习XMPP就是拥有位当前应用程序添加实时,推送,社交功能所需的工具.虽然浏览器不支持XMPP通讯,但是我们可以通过BOSH技术解决. 一个XMPP网络包含如下 服务器:为XMPP节提供路由,是否支持 ...
随机推荐
- AutoMapper的介绍与使用(一)
软件环境 vs2015 asp.net mvc 5 .NET Framework 4.5.2 AutoMapper 5.2.0.0 AutoMapper安装 新建asp.net mvc 项目 Auto ...
- form表单验证-Javascript
Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...
- Zephyr OS 简介
最新发布的开源 Zephyr Project™(Zephyr 项目)是一款小型且可伸缩的实时操作系统,尤其适用于资源受限的系统,可支持多种架构:该系统高度开源,对于开发人员社区完全开放,开发人员可根据 ...
- js月份,日期加一天
js没有直接可以用的函数,所以只能自己写,其中需要涉及到每个月天数的判断,如果是2月份的话,还要涉及到闰年的判断 var addDate = { //日期,在原有日期基础上,增加days天数,默认增加 ...
- 分布式唯一ID生成服务
SNService是一款基于分布式的唯一ID生成服务,主要用于提供大数量业务数据建立唯一ID的需要;服务提供最低10K/s的唯一ID请求处理.如果你部署服务的CPU资源达到4核的情况下那该服务最低可以 ...
- Xamarin.Android之Fragment Walkthrough
利用Fragment设计能够兼容不同屏幕的应用 这里我们先围观下最后的成果图,给读者打打气: 普通手机上显示的结果: 在平板上显示的结果: 笔者要郑重声明下,虽然看似是两种不同的显示效果,但是同一个应 ...
- 微软.Net 社区虚拟大会 -- 首日重点(dotnetConf 2016)
6月7日--9日,为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开. 在 Scott Hunter, Miguel de Icaza (Xamarin CTO) , ScottHan ...
- AutoMapper(三)
返回总目录 自定义类型转换 有时,需要完全控制一个类型到另一个类型的转换.一个类型一点都不像另一个类型,而且转换函数已经存在了,在这种情况下,你想要从一个“宽松”的类型转换成一个更强壮的类型,例如一个 ...
- CSharpGL(26)在opengl中实现控件布局/渲染文字
CSharpGL(26)在opengl中实现控件布局/渲染文字 效果图 如图所示,可以将文字.坐标轴固定在窗口的一角. 下载 CSharpGL已在GitHub开源,欢迎对OpenGL有兴趣的同学加入( ...
- Entity Framework 6 Recipes 2nd Edition(10-6)译 -> TPT继承模型中使用存储过程
10-6. TPT继承模型中使用存储过程 问题 想在一个TPT继承模型中使用存储过程 解决方案 假设已有如Figure 10-6所示模型. 在模型里, Magazine(杂志) and DVD继承于基 ...