XMPP 常見錯誤一

2022-07-08 02:24:09 字數 1741 閱讀 2255

在xmpp開發中,使用xmppstream進行連線伺服器後,驗證過程中,比較常見的乙個錯誤是

.尤其作為初學者(筆者就是這樣的),經常會因為這個問題弄得不著邊際的凌亂.現在筆者將自己的遇到的問題定期整理,總結錯誤,希望對日後的使用有所參考,同時希望能夠對也是在這方面的初學者有所提醒.

伺服器的測試版本為openfire 3.9.3  ; 資料庫使用的是mysql; mac環境為xcode5.1.1;

開放中,一般在設定了xmppstream的jid以及hostname之後,就可以進行連線伺服器:

nsstring *name = [[nsuserdefaults standarduserdefaults] objectforkey:@"

name"];

nsstring *host = [[nsuserdefaults standarduserdefaults] objectforkey:@"

host"];

xmppjid *myjid =[xmppjid jidwithuser:name domain:host resource:nil];

_xmppstream.myjid =myjid;

_xmppstream.hostport = 5222

; _xmppstream.hostname =host;

nserror *error;

if([_xmppstream isconnected])

[_xmppstream connectwithtimeout:xmppstreamtimeoutnone error:&error];

正常情況下,連線伺服器成功(此時並不需要密碼嚴重)後,xmppstream會通知**,那麼我們就可以在**的相應方法中,進行連線後的操作:

1 - (void)xmppstreamdidconnect:(xmppstream *)sender

2

一般在這裡進行使用者的密碼驗證,雖然authenticatewithpassword:erroe:方法在官方的解釋裡面說會在後續的版本中漸漸丟棄,但這無疑是我們用來測試驗證的非常方便的乙個介面.

這時候,我們經常會在密碼正確的時候,遇到

這個錯誤.

作為初學著遇到這個問題,常常覺得莫名其妙,明明密碼是正確的,但系統就是提示認證失敗,而且如果使用spark這樣的客戶端,卻完全可以正常登入伺服器;最難過的是,在xmppstream的這個錯誤中,沒有所謂的code碼,這就更難定位到底是**出了問題(不像使用者名稱和密碼的錯誤提示code8,以及伺服器相關的code61那麼友善).

這個錯誤會通過xmppstream**返回來:

1 - (void)xmppstream:(xmppstream *)sender didnotauthenticate:(ddxmlelement *)error

2//

其實,xmpp認證的問題,一般都是與jid有關的,因此解決這類問題,首選的入口就是分析一下xmppstream的jid,客戶端在與伺服器連線後,socket就繫結了這個埠,用來處理與伺服器的往返資料,認證就是其中之一.而且,往往我們在與伺服器來連線的時候,為了簡便,經常使用localhost或者127.0.0.1來當做網域名稱的部分,這時候要尤其注意,因為使用spark或者其他客戶端程式登入的時候,使用這樣的網域名稱登入伺服器是沒有問題的,但在**中處理就要特別小心,一定要在伺服器的後段,確認網域名稱統一:

否則,就會出現本文提示到的這個常見錯誤!!!!!!

// 注: 筆者在第一次遇到這個問題時,整整糾結了一晚上.....

XMPP 常見錯誤

一般登陸 註冊 出錯,會在認證失敗這裡列印出error資訊 void xmppstream xmppstream sender didnotauthenticate ddxmlelement error 其實,xmpp認證的問題,一般都是與jid有關的,因此解決這類問題,首選的入口就是分析一下xmp...

XMPP環境搭建常見錯誤

1 首先安裝openfire時,不要忘記開啟指令碼語法 2 建立使用者安裝客戶端進行測試,我使用的是psi不過這個不要忘記設定host,在connetion指定手動連線host 3 openfire在重啟時候可能出現log找不到錯誤,使用管理員賬號執行就好了。4 下面是連線的設定部分 在apache...

ios block常見的錯誤(一)

block是oc中的一種資料型別,在ios開發中被廣泛使用。在實際的使用和面試過程中,經常發現同事或面試者對block了解得不夠透徹,本博文將列舉常見block錯誤來對其加深理解。示例 1 1 int i 10 2 void myblock 5 i 100 6 myblock 示例 1的輸出結果不是...