在 xmpp 中接收消息

Posted

技术标签:

【中文标题】在 xmpp 中接收消息【英文标题】:receiving message in xmmp 【发布时间】:2012-10-09 13:45:07 【问题描述】:

如何接收来自服务器的消息?我有一部分可以向服务器发送消息但不能从服务器接收消息?它应该怎么做?我正在使用 xmpp 作为传输协议

package com.example.xmpp.asmack;

import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.EditText;
import android.widget.TextView;

    public class XMPPAsATransportProtocol extends Activity implements OnClickListener 
        XMPPConnection conn;
        TextView output;
        final String HOST = "vps01.fit3140hack.org";
        final int PORT = 5222;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) 
            super.onCreate(savedInstanceState);
            Log.d("xmppasatransportprotocol", "got to start");
            setContentView(R.layout.main);
            View createbutton = findViewById(R.id.button1);
            View messagebutton = findViewById(R.id.button2);
            View closebutton = findViewById(R.id.button3);
            output = (TextView) findViewById(R.id.textView2);
            Log.d("xmppasatransportprotocol", "got buttons");

            createbutton.setOnClickListener(this);
            messagebutton.setOnClickListener(this);
            closebutton.setOnClickListener(this);
        

        private void sendMessage() throws XMPPException 
            Log.d("xmppasatransportprotocol", "sendmessage");
            Chat chat = conn.getChatManager().createChat("22686274test2@" + HOST, null);
            EditText message = (EditText)findViewById(R.id.editText1);
            chat.sendMessage(message.getText().toString());
        
        private void openConnection() throws XMPPException 
            Log.i("xmppasatransportprotocol", "openconnection");
            ConnectionConfiguration config = new ConnectionConfiguration(HOST, PORT);
            config.setSASLAuthenticationEnabled(true);
            conn = new XMPPConnection(config);

            conn.connect();
            conn.login("22686274test1", "dummy");
        
        private void closeConnection() 
            Log.i("xmppasatransportprotocol", "closeconnection");

            conn.disconnect();
        

        public void onClick(View v) 
            try 
                switch(v.getId()) 
                    case R.id.button1:
                        openConnection();
                        Log.i("xmppasatransportprotocol", "Connected to " + HOST + ":" + PORT);
                        output.setText("Connected to " + HOST + ":" + PORT);
                        break;
                    case R.id.button2:
                        sendMessage();
                        Log.i("xmppasatransportprotocol", "message sent");
                        EditText message = (EditText)findViewById(R.id.editText1);
                        output.setText("Message sent:\n" + message.getText().toString());
                        break;
                    case R.id.button3:
                        closeConnection();
                        output.setText("Disconnected");
                        break;
                    default:    
                        throw new Exception("screwed up exception");
                
             catch (Exception e) 
                Log.d("xmppasatransportprotocol", "exception caught:" + e.getMessage());
                output.setText("Error: " + e.getMessage());
            
        
    

【问题讨论】:

文档非常明确。你试过什么? 【参考方案1】:

    确保您在服务器中有您使用的帐户。

    您需要监听错误。将侦听器附加到相应的连接发布者,如 conn.addConnectionCreationListener 等。为此,您需要实现 MessageListener、ConnectionCreationListener、org.jivesoftware.smack.ConnectionListener、PacketListener 等接口。在实现这些接口时,覆盖 connectionClosedOnError(Exception e) 可能会让您知道出了什么问题,在覆盖的方法 processPacket(Packet packet) 中,您应该检查如下错误:

    if (packet.getError() != null) 
    
        Exception e = new XMPPException(packet.getError())
        System.out.println(e);
    
    

【讨论】:

以上是关于在 xmpp 中接收消息的主要内容,如果未能解决你的问题,请参考以下文章

无法在 xmpp 的聊天屏幕中获取接收消息

如何在php中使用xmpp发送和接收消息

在 Swift 中请求服务器接收 xmpp 消息

xmpp在android应用程序中发送和接收消息

有没有办法实现 XMPP 客户端或接收到的消息,可以接收来自 XMPP 服务器的所有消息?

如何在 IOS 的 XMPP 群聊中接收通知