【问题标题】:Smack api and Openfire server presence errorSmack api 和 Openfire 服务器存在错误
【发布时间】:2013-05-07 09:23:06
【问题描述】:

我正在使用 Smack api 开发一个聊天应用程序,但在接收状态数据包时卡住了。


使用 Smack 3.2.2 和 3.3.0 测试。
这些问题仅涉及使用 Openfire 服务器 3.8.1。
首先:我正在从 Spark 发送存在数据包并成功接收它
第二我正在更新并将状态数据包从 Spark 客户端发送到我自己的:

<presence id="b8nyI-95">
   <status>Free to chat</status>
   <priority>1</priority>
   <show>chat</show>
   <x xmlns="vcard-temp:x:update">
     <photo>d37b60faea717f9f7ca08bef1504d2de68a789eb</photo>
   </x>
   <x xmlns="jabber:x:avatar">
     <hash>d37b60faea717f9f7ca08bef1504d2de68a789eb</hash>
   </x>
</presence>

并在 Spark 调试中接收回:

<presence id="b8nyI-95" to="test2@localhost/Spark 2.6.3" from="test3" type="error">
 <error code="404" type="CANCEL">
   <remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
 </error>
</presence>

我自己的客户端没有收到任何数据包。 这仅在我尝试更新我在 Spark 中的状态时出现。



使用另一个 xmpp 服务器进行测试:我认为它是 ejabberd
从 Spark 发送存在:

<presence id="B0ANe-55">
 <status>Free to chat</status>
  <priority>1</priority>
 <show>chat</show>
</presence>

*将其接收到我的聊天应用程序中 *

<presence from='test2@maxciceu.p1.im/Spark 2.6.3' to='test3@maxciceu.p1.im/Smack' id='B0ANe-55'> 
 <status>Free to chat</status>
  <priority>1</priority>
 <show>chat</show>
</presence>

两个名册的订阅设置为:both
- 使用 Openfire 我能够:连接、接收名册列表(它在初始化时获得存在)、发送和接收消息、发送文件。
---不能做:更新名册存在:尝试使用 RosterListener 并将名册重新加载到我的列表中


我添加了一个 RosterListener

   Roster roster = Client.getClient().connection.getRoster();
   roster.addRosterListener(new RosterListener() {
     @Override
    public void entriesAdded(Collection<String> addresses) {}
    @Override
    public void entriesDeleted(Collection<String> addresses) {}
    @Override
    public void entriesUpdated(Collection<String> addresses) {}
    @Override
    public void presenceChanged(Presence presence) {
        System.out.println("Presence changed: " + presence.getFrom() + " " + presence);

    }
});

->使用 Openfire 更新名册的存在时不起作用 // 使用其他服务器一切都很好。

->还添加了(不知道对我的问题是否有帮助):

    ServiceDiscoveryManager sdm = ServiceDiscoveryManager.getInstanceFor(connection);
    if (sdm == null){
         sdm = new ServiceDiscoveryManager(connection);}
    sdm.addFeature("http://jabber.org/protocol/disco#info");
    sdm.addFeature("http://jabber.org/protocol/disco#item");
    sdm.addFeature("http://jabber.org/protocol/caps");     
    JingleManager.setJingleServiceEnabled();
    ProviderManager.getInstance().addIQProvider("vCard", "vcard-temp", new VCardProvider());

已经通过 Google 和 StackOverflow。

如果有人可以提供帮助,我将不胜感激。

【问题讨论】:

    标签: java xmpp openfire smack


    【解决方案1】:

    重装系统后问题解决。 我使用本教程进行了 ubuntu 的全新安装并安装了 Openfire:http://www.thefanclub.co.za/how-to/how-setup-im-voip-server-using-openfire-ubuntu-1204

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-27
      • 2011-10-01
      • 2021-01-16
      • 1970-01-01
      • 2011-03-17
      • 2011-09-23
      • 1970-01-01
      相关资源
      最近更新 更多