下面显示我建议发布到节点调用“ghost2”
iq id="kB8dk-0" to="computer/2c10ee6b" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>admin@computer/Smack</jid></bind></iq>
<iq id="kB8dk-1" to="admin@computer/Smack" type="result"></iq>
<iq id="kB8dk-2" to="admin@computer/Smack" type="result"><query xmlns="jabber:iq:roster"><item jid="test" name="test" subscription="none"></item><item jid="test@computer" subscription="from"></item></query></iq>
<message id="admin@computer__admin@computer__ChWrY" to="admin@computer" from="admin@computer"><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='null'><item id='ghost2'/></items></event></message>
<iq id="kB8dk-4" to="admin@computer/Smack" from="computer" type="result"></iq>
<iq id="kB8dk-5" to="admin@computer/Smack" from="computer" type="result"></iq>
<message id="ghost2__admin@computer__DGaLS" to="admin@computer" from="admin@computer"><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='ghost2'><item id='testid2'><book xmlns="pubsub:test:book"><title>book x</title></book></item></items></event></message>
但是当我尝试从同一节点进行传入和检索时,我得到错误404
<iq id="zpWDI-0" to="computer/b7fe68a8" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><jid>test@computer/Smack</jid></bind></iq>
<iq id="zpWDI-1" to="test@computer/Smack" type="result"></iq>
<iq id="zpWDI-2" to="test@computer/Smack" type="result"><query xmlns="jabber:iq:roster"><item jid="admin@computer" name="test" subscription="to"><group>Friends</group></item><item jid="test" name="test" subscription="none"></item></query></iq>
<presence id="kB8dk-3" to="test@computer/Smack" from="admin@computer/Smack"></presence>
<message id="admin@computer__test@computer__tAVfB" to="test@computer/Smack" from="admin@computer"><event xmlns='http://jabber.org/protocol/pubsub#event'><items node='TestNode2323'><item id='2Ke42PVQ77iSCP0'><book xmlns="pubsub:test:book"><title>book x</title></book></item></items></event><x xmlns="jabber:x:delay" stamp="20091013T14:16:32"></x><addresses xmlns="http://jabber.org/protocol/address"><address type="replyto" jid="admin@computer/god"/></addresses></message>
<iq id="zpWDI-4" to="test@computer/Smack" from="computer" type="error"><query xmlns="http://jabber.org/protocol/disco#info" node="ghost2"></query><error code="404" type="CANCEL"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq>
答案 0 :(得分:2)
您已收到已发布的项目:
<book xmlns="pubsub:test:book"><title>book x</title></book>
您收到来自此计算机的“计算机”(您的xmpp服务器)的404错误:
<query xmlns="http://jabber.org/protocol/disco#info" node="ghost2"></query>
与服务发现有关。您是否有可能从完整的对话中删除了一些消息?
编辑:
你可以尝试替换:
PubSubManager manager = new PubSubManager(connection, "computer");
用这个
String pubSubAddress = "pubsub." + connection.getServiceName();
PubSubManager manager = new PubSubManager(connection, pubSubAddress);
答案 1 :(得分:0)
也许这个例子可以为您提供参考:
public void login(String Ip,String username,String passwaord)
{
try
{
connConfig = new AndroidConnectionConfiguration(Ip, 5222);
connection = new XMPPConnection(connConfig);
connection.connect();
connection.login(username, passwaord);
pubSubAddress = "pubsub."+ connection.getServiceName();
manager = new PubSubManager(connection,pubSubAddress);
Log.i("MyError","connection success");
}
catch (XMPPException e)
{
Log.i("MyError","connection failed");
e.printStackTrace();
}
}
此外,您可以参考与您的相关的another question。
希望这会有所帮助。
答案 2 :(得分:0)
也许您可以参考以下示例:
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smackx.pubsub.ItemPublishEvent;
import org.jivesoftware.smackx.pubsub.Node;
import org.jivesoftware.smackx.pubsub.PayloadItem;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jivesoftware.smackx.pubsub.listener.ItemEventListener;
public class XmppPubsub_Reciever {
private static XMPPConnection connection = new XMPPConnection("think");
private static String USRE_NAME = "user";
private static String PASSWORD = "1";
static {
try {
connection.connect();
connection.login(USRE_NAME, PASSWORD);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception {
String nodeId = "test";
PubSubManager manager = new PubSubManager(connection);
Node eventNode = manager.getNode(nodeId);
eventNode.addItemEventListener(new ItemEventListener<PayloadItem>() {
public void handlePublishedItems(ItemPublishEvent evt) {
for (Object obj : evt.getItems()) {
PayloadItem item = (PayloadItem) obj;
System.out.println("--:Payload=" + item.getPayload().toString());
}
}
});
eventNode.subscribe(connection.getUser());
while(true);
}
}