我正在使用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);
}
});
- &gt;在使用Openfire更新名单的情况时不起作用//与其他服务器一切正常。
- &gt;也添加了(不知道是否对我的问题有帮助):
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。
如果有人可以提供帮助,我将不胜感激。
答案 0 :(得分:0)
系统重新安装后问题解决了。 我使用本教程完成了ubuntu的全新安装并安装了Openfire:http://www.thefanclub.co.za/how-to/how-setup-im-voip-server-using-openfire-ubuntu-1204。