gloox連線至伺服器端
在使用gloox之前,有必要先提一下xmpp協議這個東東。
xmpp協議是乙個基於網際網路的即時通訊標準協議。它採用xml技術,以文字的方式傳輸即時訊息。支援動態自定義擴充套件應用。與傳統的網路協議相比,如qq等,xmpp協議並不是乙個基於二進位制方式實現的協議,而是基於xml技術的文字方式,也就是說如果不採用加密技術的話,是可以直接檢視傳送的訊息的。xmpp協議通過定義一些xml的節點關鍵字,來表明訊息傳送資訊,並與其它協議能夠有效的結合,總的說來,xmpp協議是一種很不錯的準實時訊息協議標準。如果允許,你可以自己定義乙個協議出來,只要約定了xml節點關鍵字,並考慮了訊息交換中的各種情況。但是如果沒有特別的情況,一般應該是採用xmpp協議標準進行訊息交換,同時可以根據自己的特定應用,適當擴充套件一些節點,並根據自行擴充套件約定,解析之即可。
那麼gloox是用來幹嘛的呢?問題很簡單,根據前面所述,xmpp協議只是乙個協議,乙個約定,但本身並沒有提供實現方式。也就是說,xmpp協議定義的那些關鍵字以及傳送訊息等這些是需要實現的,只要按照xmpp協議來做的話,就可以互通訊息了。而gloox就是實現了這樣乙個協議的開發包,我們可以通過這個開發包,開發自己的應用來。
那麼gloox如何實現了xmpp協議的呢,其實它的底層就是乙個socket在收發資料,然後將資料進行xml的解析,封裝就可以了。如果允許的話,你是可以自己做socket通訊的,只要連線到xmpp伺服器,然後收發訊息就可以了,對收到的訊息,將其解析成xml格式,然後再獲取需要的資訊,對於發訊息,也是將要傳送的文字訊息封裝成xmpp協議定義的關鍵節點,然後利用socket傳送就可以了。
當然,如果通過socket通訊方式,按xmpp協議要求收發訊息是沒有任何問題的,可是說實話,真正能把握socket通訊是有一定難度的,雖然看起來就那麼幾個api,要想用好需要時間。而gloox已經做了這一步了,何必要重**明輪子呢?gloox已經在底層實現了和xmpp伺服器的socket通訊了,並且提供了二次開發介面,使我們不用考慮底層資料連線等方面的問題,何樂而不為呢?
明白了這一點,在使用gloox的api進行二次開發時,就能知其然,也知其所以然了。
這次先從基本的和xmpp協議伺服器連線開始,一步一步來。
] 網域名稱[″/″資源], 其中各個域的長度不能超過1 023 位元組, 總長度最大為3071 位元組。從jid的定義可以看出來,其實要連線到伺服器,jid中就已經含有了伺服器的位址,而如果預設採用5222埠號的話,則可以不用提供伺服器位址和埠就可以了,而只通過jid就可以和伺服器連線上。
我使用的伺服器是openfire,故我直接通過openfire的管理端在裡面建了幾個使用者,當然gloox提供了向伺服器註冊帳號,修改密碼以及刪除帳號的api,不過我這裡暫時不去做這個功能,因為我覺得在實際的專案開發中意義不大,並且如果能將其它的功能理解了,看一下gloox原始碼中的那個註冊的例子,應該是沒有任何問題的。
現在假設我已經註冊了乙個使用者名為:test
,密碼為:test的帳號,後面我將用這個帳號進行和伺服器的連線,即登陸。
假設現在你有乙個類叫messagetest,該類中有乙個方法叫start(),你打算用這個方法進行登陸,則登陸的**如下(**中含有解釋):
#include"client.h"
#include"connectionlistener.h"
#include"disco.h"
#include"stanza.h"
#include"gloox.h"
#include"lastactivity.h"
#include"connectiontcpclient.h"
using namespacegloox;
#ifndef _win32
# include
#endif
#include
#include
#if defined(win32 ) || defined( _win32 )
# include
#endif
//connectionlistener
為乙個連線狀態資訊的
//***,當連線成功,或者失敗時,都 //
會呼叫該***中的該方法。如果你對連線狀態資訊不感興趣,可以不用繼承該 //
類,認為連線肯定是成功的。但一般的使用是,需要繼承該介面,並實現其中的三個 //
虛函式。
class messagetest: public connectionlistener
virtual ~messagetest() {}
void start()
connectionerror ce =connnoerror;
if( j->connect( false ) )
printf( "ce: %d\n", ce ); }
delete( j ); }
//該該方法即為實現
connectionlistener
***介面中的連線成功的方法實現。
virtual void onconnect()
//該該方法即為實現
connectionlistener
***介面中的連線失敗或者 //
斷開網路的方法實現。
virtual void ondisconnect(connectionerror e )
///該該方法即為實現
connectionlistener
***介面中的安全連線成功的方法實現。
virtual bool ontlsconnect( constcertinfo& info )
private:
client *j;//
客戶端例項物件 };
int main( int/*argc*/, char** /*argv*/ )//
測試**
在連線伺服器中,只要你建立了乙個client物件例項,你就可以通過該例項操作了。其實獲得乙個與伺服器的連線,就是獲得乙個client例項物件,只要獲得這個例項物件,就擁有了和伺服器的連線(前提是呼叫了client物件中的connect()該方法)。
SQL連線到伺服器
1.伺服器型別 資料庫引擎 3.身份驗證 windows身份驗證 不需要新增登入名和密碼就可以直接進行連線。前提是需要登入資料庫所在的電腦。sql server身份驗證 在無法登入資料庫所在電腦,只能訪問sql server的條件下,只能使用此方式進行驗證,它需要輸入登入名與密碼。在使用sql se...
gloox連線至伺服器端
原文出自 http blog.csdn.net qiuhong101 在使用gloox之前,有必要先提一下xmpp協議這個東東。xmpp協議是乙個基於網際網路的即時通訊標準協議。它採用xml技術,以文字的方式傳輸即時訊息。支援動態自定義擴充套件應用。與傳統的網路協議相比,如qq等,xmpp協議並不是...
gloox連線至伺服器端
原文出自 在使用gloox之前,有必要先提一下xmpp協議這個東東。xmpp協議是乙個基於網際網路的即時通訊標準協議。它採用xml技術,以文字的方式傳輸即時訊息。支援動態自定義擴充套件應用。與傳統的網路協議相比,如qq等,xmpp協議並不是乙個基於二進位制方式實現的協議,而是基於xml技術的文字方式...