我使用以下代码发送消息。

 // Assume we've created an XMPPConnection name "connection".
ChatManager chatmanager = connection.getChatManager();
Chat newChat = chatmanager.createChat("jsmith@jivesoftware.com", new MessageListener() {
    public void processMessage(Chat chat, Message message) {
        System.out.println("Received message: " + message);
    }
});

try {
    newChat.sendMessage("Howdy!");
}
catch (XMPPException e) {
    System.out.println("Error Delivering block");
}

下面是接收发送给我的jabberid的消息,异步。

// Create a packet filter to listen for new messages from a particular
// user. We use an AndFilter to combine two other filters.
PacketFilter filter = new AndFilter(new PacketTypeFilter(Message.class), 
        new FromContainsFilter("mary@jivesoftware.com"));
// Assume we've created an XMPPConnection name "connection".

// First, register a packet collector using the filter we created.
PacketCollector myCollector = connection.createPacketCollector(filter);
// Normally, you'd do something with the collector, like wait for new packets.

// Next, create a packet listener. We use an anonymous inner class for brevity.
PacketListener myListener = new PacketListener() {
        public void processPacket(Packet packet) {
            // Do something with the incoming packet here.
        }
    };
// Register the listener.
connection.addPacketListener(myListener, filter);

发送消息还可以。

但是,直到我向那个jabberid发送一条消息之前,从另一个Jabberid那里收到消息才能实现。

之后,我收到正确发送的消息。

请注意,我经常需要从列表中不在列表中的Jabberids接收消息,并且我的应用程序通常不是开始聊天的一方。

上代码是SMACK样本,但我的代码完全相同,除了我没有创建PacketListener实现内联。

有帮助吗?

解决方案

当我在测试程序期间停止使用Jabber客户端使用相同用户的Jabber客户端时,我的问题解决了。换句话说,代码是正确的,但是Jabber Client收集了发送消息,并且我的程序无法捕获。

其他提示

自从我与Smack合作以来已经有一段时间了,但是我设法根据传入消息开始聊天。

如果我还记得很好,我有某种“聊天报告”,一个简单的 Map<String, Chat> 钥匙等于聊天伙伴ID。然后,我听了传入的消息,提取了Jabber ID,并与该合作伙伴查找了主动聊天会话。如果没有活动的会话,我创建了一个新的聊天,并将新的键/谷对添加到注册表中。

只是有点困惑。你说

上代码是SMACK样本,但我的代码完全相同,除了我没有创建PacketListener实现内联。

您如何在没有PacketListener实施的情况下接收消息?我认为您将始终从聊天中收到聊天消息,因为以下代码

chat newchat = chatmanager.createchat(“ jsmith@jivesoftware.com”,new MessageListener(){public void processMessage(聊天聊天,消息消息){system.out.println(“接收消息:” + message:“ + message);}}});

但是,为了异步等待传入的消息,我认为您需要一个PacketListener。我可能完全误解了您面临的问题

(这应该是评论,但我不知道如何添加一个)

已经有一段时间了,您设法解决了吗?您为什么要从ConcontainsFilter创建?这样,您的听众仅处理给定用户而不是所有数据包的数据包。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top