xmpp學習
下載:
服務器:Openfire 4.0.2
客戶端:Spark 2.7.7
安裝
Openfire安裝:
根據(jù)提示一直下一步,服務器域名設置為:localhost(ps:如果使用gloox,還是直接用機器名,因為gloox不識別ip);數(shù)據(jù)庫使用內(nèi)嵌數(shù)據(jù)庫或別的標準數(shù)據(jù)庫。
使用mysql的時候需要注意要用管理員權限打開Openfire,否則會出現(xiàn)如下錯誤:
HTTP ERROR 500
Problem accessing /setup/setup-profile-settings.jsp. Reason:
Server Error
Caused by:
安裝完成后瀏覽器登錄:http://127.0.0.1:9090
Spark
分別在兩臺電腦上安裝Spark,創(chuàng)建各自用戶,互添加好友,然后就可以通信了。
自己實現(xiàn)客戶端
使用agsXMPP
很好用,直接到官網(wǎng)下載即可,有詳細例子,但是程序運行時調(diào)試輸出信息中會有
在 System.Net.Sockets.SocketException 中第一次偶然出現(xiàn)的“System.dll”類型的異常
的提示
網(wǎng)上說可能是服務器的問題,暫時沒找。
使用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
調(diào)試例子
- 新建一個win32控制臺空項目,字符集為多字節(jié)
- 新建篩選器gloox
- 把gloox中src文件夾與config.h.win文件復制到新項目中
- 修改src文件夾為gloox,并把其中文件(不包括子目錄)添加到篩選器gloox中
- 加載gloox文件夾下的examples中例子進行調(diào)試
例如:MyGloox2015下MyGloox項目
gloox內(nèi)存泄露
本人發(fā)現(xiàn)不管是直接使用gloox還是自己封裝gloox,都會有內(nèi)存泄露,找了幾個版本以及別人寫的程序,發(fā)現(xiàn)都有內(nèi)存泄露的問題。
使用libstrophe
libstrophe編譯
下載libstrophe-master.zip
解壓,看看各目錄,expat是空的,再下載expat,解壓,不需要編譯,把.h和.c放到expat\lib下面。
然后先編譯expat,順利編譯出 lib文件、
再編譯libstrophe工程,會提示沒有parser.c??凑f明文檔,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
- 全部編譯通過,測試登錄和發(fā)消息,api簡潔明了,是目前見過最好用的xmpp庫。當然gloox和qxmpp也都很好用,還有l(wèi)ibjingle功能更強,各取所需。
個人又遇到一個錯誤:
1>libstrophe.lib(sasl.obj) : error LNK2019: 無法解析的外部符號 _SCRAM_SHA1_ClientSignature,該符號在函數(shù) _sasl_scram_sha1 中被引用
1>libstrophe.lib(sasl.obj) : error LNK2019: 無法解析的外部符號 _SCRAM_SHA1_ClientKey,該符號在函數(shù) _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直接打開