Smack API和Openfire服务器存在错误

我正在开发一个使用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>

这两个名册的订阅都设置为: 两者
- 使用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());

已经通过谷歌和StackOverflow。

如果任何人都可以帮助,我会感激。


问题在系统重新安装后解决。 我做了一个干净的Ubuntu安装,并使用本教程安装了Openfire:http://www.thefanclub.co.za/how-to/how-setup-im-voip-server-using-openfire-ubuntu-1204。

链接地址: http://www.djcxy.com/p/94083.html

上一篇: Smack api and Openfire server presence error

下一篇: How to keep a XMPP connection stable on Android with (a)smack?