Одно приложение для чата Android не может получать сообщения (aSamck + Openfire)

1

Я применил приложение чата с помощью aSmack. Я использовал сервер openfire как сервер чата. Все эти приложения работают на одном компьютере. Но когда я пытаюсь отправить сообщения между двумя эмуляторами, только один эмулятор успешно получает сообщения. Другой клиент не получит никаких сообщений. Но от обоих эмуляторов я смог отправлять сообщения к pigin (IM-клиенту). Также, если я использую gmail.com в качестве сервера чата, все работает отлично.

Имена пользователей, используемые для входа в систему jayamal suchith (openfire означает, что пользователи подключены к сети)

имена, используемые для отправки сообщений jayamal @elearn (elearn - это домен i, созданный на моей машине, с использованием openfire) suchith @elearn
(но в архивах openfire отображается одно имя как jayamal @elearn/Smack, пытались отправить сообщение на это имя, но оно также не увенчалось успехом)

Пожалуйста, помогите устранить эту проблему. Ваша помощь очень ценится.

Открытый класс ASmackChatTestActivity расширяет действие {

public int state = 0;
private static final String TAG = "HelloFormStuffActivity"; 

XMPPConnection xmpp ;




/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    Button btnLogin = (Button) findViewById(id.btnLogin);

    btnLogin.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            EditText txtUserName = (EditText) findViewById(id.txtUserName);
            EditText txtPass = (EditText) findViewById(id.txtPass);

            String userName = txtUserName.getText().toString();
            String password = txtPass.getText().toString();

            new login().execute(userName,password);
        }
    });



    Button btnSend = (Button) findViewById(id.btnSend);

    btnSend.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            EditText txtMessage = (EditText) findViewById(id.txtMessage);
            EditText txtTo = (EditText) findViewById(id.txtTo);

            String message = txtMessage.getText().toString();
            String to = txtTo.getText().toString();

            new sendMessage().execute(to,message);
        }
    });

    Button btnStop = (Button) findViewById(id.btnStopServices);

    btnStop.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            EditText txtTo = (EditText) findViewById(id.txtTo);

            String to = txtTo.getText().toString();

            new recieveMessages().execute(to);
        }
    });


}

class login extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        String userName = params[0];
        String password = params[1];

        //XMPPConnection xmpp = new XMPPConnection("jabber.iitsp.com");

        xmpp = new XMPPConnection("10.0.2.2");

        try {
          xmpp.connect();

          // for other jabber accounts, truncate after the @
          //xmpp.login("username", "password"); 

          // for gtalk / gmail, include the @
          xmpp.login(userName, password);
          Log.v(TAG,"Logged in");

        } catch (XMPPException e) {
          Log.v(TAG, "Failed to connect to " + xmpp.getHost());
          e.printStackTrace();
        }


        return null;
    }

}

class sendMessage extends AsyncTask<String, Void, String>{


    //String msg;

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        String to = params[0];
        String message = params[1];

        ChatManager chatmanager = xmpp.getChatManager();



        Chat newChat = chatmanager.createChat(to, new MessageListener() {
          // THIS CODE NEVER GETS CALLED FOR SOME REASON
           public void processMessage(Chat chat, Message message) {
               try {
                 //  msg = message.getBody();
              Log.v(TAG, "Got:" + message.getBody());
              chat.sendMessage(message.getBody());
            } catch (XMPPException e) {
              Log.v(TAG, "Couldn't respond:" + e);
            }
            Log.v(TAG, message.toString());
          }
        }); 

        // Send something to [email protected]
        try {
          newChat.sendMessage(message);
          Log.v(TAG, "sent:" + message);
        } catch (XMPPException e) {
          Log.v(TAG, "couldn't send:" + e.toString());
        }

        return null;
    }

    @Override
    protected void onPostExecute(String result) {
        // TODO Auto-generated method stub

        //Toast.makeText(getBaseContext(),"Message Recieved : " + msg, Toast.LENGTH_LONG);
        super.onPostExecute(result);
    }


}

class recieveMessages extends AsyncTask<String, Void, String>{

    @Override
    protected String doInBackground(String... params) {
        // TODO Auto-generated method stub

        String to = params[0];

        // Accept only messages from [email protected]
        PacketFilter filter 
            = new AndFilter(new PacketTypeFilter(Message.class), 
                            new FromContainsFilter(to));

        // Collect these messages
        PacketCollector collector = xmpp.createPacketCollector(filter);

        while(true) {
          Packet packet = collector.nextResult();

          if (packet instanceof Message) {
            Message msg = (Message) packet;
            // Process message
            Log.v(TAG, "Got message: " + msg.getBody());
          }
        }

        //return null;
    }


}

}

Теги:
chat
smack
openfire
asmack

1 ответ

0

Извините, это немного запоздало.

Один пользователь, которого вы можете отправить клиенту IM (pidgin), вы можете отправить обратно на свой эмулятор. Т.е. вы можете получить в эмуляторе?

Прием сообщений основан на событиях, поэтому вам не нужно использовать кнопку "Щелчок", чтобы установить его.

Посмотрите на этот отличный пример. Автор: Davanum Srinivas

Я изменил его для моего использования довольно широко, но базовый код по-прежнему очень полезен.

http://davanum.wordpress.com/2008/12/29/updated-xmpp-client-for-android/ также смотрите оригинальную статью.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню