如何从服务器收到消息?我有可以向服务器发送消息但不从服务器接收消息的部分?它应该如何以及应该做什么?我使用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());
}
}
}
答案 0 :(得分:0)
确保您拥有在服务器中使用的帐户。
您需要侦听错误。将侦听器附加到各自的连接发布者,如conn.addConnectionCreationListener等。为此,您需要实现MessageListener,ConnectionCreationListener,org.jivesoftware.smack.ConnectionListener,PacketListener等接口。实现这些接口时,覆盖connectionClosedOnError(Exception e)可能会让您知道错误的原因,并且在重写方法processPacket(数据包)中应该检查这样的错误:
if (packet.getError() != null)
{
Exception e = new XMPPException(packet.getError())
System.out.println(e);
}