【问题标题】:Xmpp Smack Chat not able to send and receiving messageXmpp Smack Chat 无法发送和接收消息
【发布时间】:2016-09-30 23:21:51
【问题描述】:

我尝试使用 xmpp 和 OpenFire 在两个用户之间建立聊天连接。但我无法发送和接收消息。我在下面粘贴了我的代码以供参考。任何帮助都会非常有帮助。

我通过

与 Smack 建立了联系
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration.builder();
                config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);              
                config.setUsernameAndPassword("admin", "admin");               
                config.setServiceName("172.21.4.199");              
                config.setHost("172.21.4.199");              
                config.setPort(5222);
                config.setDebuggerEnabled(true);
                config.setConnectTimeout(50000);
XMPPTCPConnection connection = new XMPPTCPConnection(config.build());

XMPPTCPConnection.setUseStreamManagementResumptiodDefault(true);
XMPPTCPConnection.setUseStreamManagementDefault(true);

        try {
                    connection.setPacketReplyTimeout(50000);
                    connection.connect();
                    Log.d(TAG, "SetupDefaults -- Connected");
                } catch (Exception e) {
                    e.printStackTrace();
                    Log.d(TAG, "SetupDefaults -- Connection failed exc: "+e);
                }

 and its gets succesfully connected. And i try to send a chat by using 

 ChatManager  chatManager = ChatManager.getInstanceFor(connection);
        Chat chat = chatManager.createChat("user2@server.local", new ChatMessageListener() {
            @Override
            public void processMessage(Chat chat, Message message) {
                System.out.println("processMessage -- Sent message: " + message);
            }
        });

        try {
            chat.sendMessage("Hai.. Lets we chat!");
        }catch (Exception e){
            Log.d(TAG, "sendChat  Exc: "+e.toString());
        }

但我找不到 processMessage 被触发。因为该 S.O.P 不会被触发。但我得到了

SMACK: SENT (0): Hai.. 让我们聊天吧!

SMACK: RECV (0): Hai.. 让我们聊天吧!

发送聊天时在我的控制台中。

我也用过,

PacketListener packetListener = new PacketListener() {
                       @Override
                       public void processPacket(Stanza packet) throws SmackException.NotConnectedException {
                           Message message = (Message)packet;
                           String from  = message.getFrom();
                           String body = message.getBody();
                           System.out.println("Message from: " + from + " " + body);
                       }
                    };
                    connection.addPacketListener(packetListener, filter);

接收聊天。但是 processPacket 也不会被触发。

【问题讨论】:

    标签: xmpp chat openfire smack


    【解决方案1】:

    PacketListner 它是处理节的更通用的东西,它不是你真正需要的。你只需要一个 ChatMessageListner

    ChatManager chatManager;
    chatManager = ChatManager.getInstanceFor(connection);       
    chatManager.addChatListener(
                    **new ChatManagerListener() {
                        @Override
                        public void chatCreated(Chat chat, boolean createdLocally)
                        {
                            if (!createdLocally)
                            {
    
                                chat.addMessageListener(new IncomingMessageListener());;
                            }
                        }
                    })**;
    

    基本实现:

    class IncomingMessageListener implements ChatMessageListener {
        @Override
        public void processMessage(Chat arg0, Message message) {
            String from = message.getFrom();
            String body = message.getBody();
    
            if (body != null)
            {
                System.out.println(String.format("============ Received message '%1$s' from %2$s\n============", body, from));
                guiUpdate.displayMessage(body); /* custom method */
            }
            else
            {
                System.out.println("SYSTEM: ping");
            }
        }
    

    【讨论】:

    • 感谢您的代码。但是,上面的 addchatlistener 中的 ChatCreated 方法没有被触发。有什么帮助吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-31
    • 2016-10-26
    • 2015-04-06
    • 2013-08-27
    • 2016-06-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多