gpt4 book ai didi

android - Smack XMPP 连接未通过 4G 网络连接

转载 作者:行者123 更新时间:2023-11-29 01:15:53 24 4
gpt4 key购买 nike

我使用的是最新的 Smack 库 4.3.1。 XMPP 连接工作正常使用 WiFi,但无法使用 4G 网络。

这是我创建与 XMPP 的连接的代码。

 configBuilder = XMPPTCPConnectionConfiguration.builder();
configBuilder.setUsernameAndPassword(this.userName, this.password);
configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
configBuilder.setServiceName(Constants.HOST);
configBuilder.setPort(Constants.PORT);
configBuilder.setHost(Constants.HOST);
configBuilder.setDebuggerEnabled(Isdebugmode);
configBuilder.setResource(PDCustomer.getResource());
configBuilder.setSendPresence(true);
connection = new XMPPTCPConnection(configBuilder.build());
connection.setPacketReplyTimeout(30000);
connection.addConnectionListener(XmppConnection.this);
connection.addAsyncStanzaListener(XmppConnection.this, null);
try {
connection.connect();
connection.login(userName, password);
} catch (IOException e) {
printlog("CONNECT IO EXCEPTION:" + e.getMessage());

} catch (SmackException e) {
printlog("CONNECT SMACK EXCEPTION:" + e.getMessage());

} catch (XMPPException e) {
printlog("CONNECT XMPP EXCEPTION:" + e.getMessage());

}

最佳答案

我已经在 4G 网络中测试了以下代码

创建新的XMPPConnection

public class XMPPConnection implements ConnectionListener, ChatManagerListener, RosterListener, ChatMessageListener, PingFailedListener {
private static final String TAG = "XMPPConnection";

public static final String HOST = "XX.XX.XXX.XX"; //Replace this value
public static final int PORT = 5222;
public static final String SERVICE = "XX.XX.XXX.XX"; //Replace this value
public static String USERNAME = ""; // Replace this value
public static String PASSWORD = ""; //Replace this value
public static String TEST_JID = "android_dummy"; // Only for testing purpose

private static XMPPConnection mInstance = new XMPPConnection();

private AbstractXMPPConnection mConnection;

private ChatManager mChatmanager;
private Chat mChat;

private Context mContext;

private String mUserName = "";
private String mPassword = "";

public XMPPConnection() {
}

public static XMPPConnection getInstance() {
return mInstance;
}

//Initialize
public void init(String userId, String pwd, Context context) throws SmackException.NotConnectedException {
Log.i("XMPP", "Initializing!");

this.mUserName = userId;
this.mPassword = pwd;
this.mContext = context;

if (userId.contains("@")) {
this.mUserName = userId.split("@")[0];
Log.i("UserId", this.mUserName);
}
XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
configBuilder.setUsernameAndPassword(mUserName, mPassword);
configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
configBuilder.setServiceName(SERVICE);
configBuilder.setHost(HOST);
configBuilder.setPort(PORT);
configBuilder.setResource("");
//configBuilder.setDebuggerEnabled(true);
mConnection = new XMPPTCPConnection(configBuilder.build());

PingManager pingManager = PingManager.getInstanceFor(mConnection);
pingManager.setPingInterval(300); // 2.5 min
pingManager.registerPingFailedListener(this);

mChatmanager.getInstanceFor(mConnection).addChatListener(this);
ReconnectionManager.getInstanceFor(mConnection).enableAutomaticReconnection();

mConnection.addConnectionListener(this);

connectConnection(context);
}

public void connectConnection(final Context context) {
AsyncTask<Void, Void, Boolean> connectionThread = new AsyncTask<Void, Void, Boolean>() {

@Override
protected Boolean doInBackground(Void... arg0) {

// Create a connection
try {
mConnection.connect();

if (mConnection != null) {
Log.i(TAG, "doInBackground: ServerStatus:Connected= " + mConnection.isConnected());
login(context);
}

} catch (IOException e) {
Log.i(TAG, "doInBackground : ServerStatus : IOException = " + e.getMessage());
} catch (SmackException e) {
Log.i(TAG, "doInBackground : ServerStatus : SmackException = " + e.getMessage());
} catch (XMPPException e) {
Log.i(TAG, "doInBackground : ServerStatus : XMPPException = " + e.getMessage());
}

return null;
}
};
connectionThread.execute();
}

public void login(Context context) {
try {
Log.i(TAG, "login: USERNAME:" + mUserName + " PASSWORD:" + mPassword);

mConnection.login(mUserName, mPassword);
if (mConnection.isAuthenticated()) {
Log.i("LOGIN", "Yey! We're connected to the Xmpp server!");
sendMessage("", TEST_JID, "", "", "", "android_dummy", "android", "android", context);
}


} catch (XMPPException | SmackException | IOException e) {
e.printStackTrace();
} catch (Exception e) {
Log.i(TAG, "Login : Exception = " + e.getMessage());
}
}

public void sendMessage(String message, String to, String from, String dattingId, String deviceToken, String senderName, String senderOSName, String opponentOSName, Context context) {
this.mContext = context;

if (mConnection.isConnected() == true) {
Log.i(TAG, "sendMsg: Sending Message...");
// Assume we've created an XMPPConnection name "connection".
mChatmanager = ChatManager.getInstanceFor(mConnection);
mChat = mChatmanager.createChat("" + to, this);

// Original code
try {
Message msg = new Message();
// Set message
msg.setBody(message);
msg.setType(Message.Type.chat);
msg.setTo("" + to);
msg.setFrom("" + from);

Log.i(TAG, "Message to send : " + msg.toXML());

mChat.sendMessage(msg);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}
} else {
Log.i(TAG, "sendMsg : Unable to send Message.");
}
}

// Disconnect Function
public void disconnectConnection() {

new Thread(new Runnable() {
@Override
public void run() {
if (mConnection != null && mConnection.isConnected())
mConnection.disconnect();
mConnection = null;
}
}).start();
}

@Override
public void processMessage(Chat chat, Message message) {
if (mConnection.isConnected() && mConnection != null) {
Log.i(TAG, "Message " + message);
}
}

@Override
public void chatCreated(Chat chat, boolean createdLocally) {
Log.i(TAG, "chatCreated()");
chat.addMessageListener(this);
}

@Override
public void connected(org.jivesoftware.smack.XMPPConnection connection) {
Log.i(TAG, "Listener connected = " + connection.getUser());
}

@Override
public void authenticated(org.jivesoftware.smack.XMPPConnection connection, boolean resumed) {
Log.i(TAG, "Listener authenticated = " + connection.getUser());
Log.i(TAG, "Listener authenticated = resumed : " + resumed);
}

@Override
public void connectionClosed() {
Log.i(TAG, "Listener connectionClosed");
}

@Override
public void connectionClosedOnError(Exception e) {
Log.i(TAG, "Listener connectionClosedOnError = " + e.getMessage());
}

@Override
public void reconnectionSuccessful() {
Log.i(TAG, "Listener reconnectionSuccessful");
if (mContext != null) {
sendMessage("", TEST_JID, "", "", "", "android_dummy", "android", "android", mContext);
}
}

@Override
public void reconnectingIn(int seconds) {
Log.i(TAG, "Listener reconnectingIn = " + seconds);
}

@Override
public void reconnectionFailed(Exception e) {
Log.i(TAG, "Listener reconnectionFailed = " + e.getMessage());
}

@Override
public void pingFailed() {
Log.i(TAG, "Listener pingFailed");
}

@Override
public void entriesAdded(Collection<String> addresses) {

}

@Override
public void entriesUpdated(Collection<String> addresses) {

}

@Override
public void entriesDeleted(Collection<String> addresses) {

}

@Override
public void presenceChanged(Presence presence) {
Log.i(TAG, "presenceChanged: " + presence.getClass().toString());
}

现在调用 init() 方法,例如,

// Check XMPP connection
try {
XMPPConnection.getInstance().init(USER_JABBERID, USER_JABBER_PASSWORD, HomeActivity.this);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
}

关于android - Smack XMPP 连接未通过 4G 网络连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39725612/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com