2012-03-16 63 views
1

我試圖發現pubsub服務提供的項目。當我登錄到目標服務器時,我可以成功獲得響應。但是當我連接的時候不要登錄,它會給出錯誤的請求。沒有登錄的Smack服務發現提供不良請求(400)

這是代碼:

ConnectionConfiguration config = new ConnectionConfiguration(serverAddress, 5222); 
config.setServiceName(serviceName); 
connection = new XMPPConnection(config); 
connection.connect(); 
connection.login(userName, password); //!!!when I remove this line, bad request error is received 

ServiceDiscoveryManager discoManager = ServiceDiscoveryManager.getInstanceFor(connection); 
DiscoverItems items; 
try { 
items = discoManager.discoverItems("pubsubservice." + serverName); 
} catch (XMPPException e) { 
e.printStackTrace(); 
} 

有沒有一種方法來發現,當用戶沒有登錄項目,但在建立連接?

回答

0

不,您必須通過身份驗證才能將節發送給XMPP中的任何JID(否則他們將無法回覆您,因爲他們不知道您的地址)。

也許您的一個選擇是匿名身份驗證。大多數服務器都支持它,它會在服務器上爲您創建一個臨時帳戶,並附帶一個臨時JID。您不需要密碼,登錄時間很快。

0

@MattJ是正確的,你可以嘗試使用匿名登錄。那會讓你分開。

你目前的請求只會讓你獲得節點,然後你必須得到每個節點的項目。這將是簡單的使用PubsubManager得到你想要的,因爲它提供了訪問/使用所有的東西發佈訂閱方便的方法的信息。

嘗試documentation here中,getAffiliations()方法是你在找什麼。

順便說一句,我相信發佈訂閱典型的默認服務名稱是發佈訂閱沒有pubsubservice。 Openfire至少是這種情況。

相關問題