我正在开发Ubuntu。我正在尝试将我的xmpp客户端连接到本地openfire服务器。
AndroidConnectionConfiguration configuration = new AndroidConnectionConfiguration(
host, Integer.parseInt(port), service);
SASLAuthentication.supportSASLMechanism("PLAIN", 0); // (I tried after removing this line)
configuration.setSASLAuthenticationEnabled(true);
configuration.setDebuggerEnabled(true);
XMPPConnection connection = new XMPPConnection(configuration);
try {
connection.connect();
Log.i("XMPPClient",
"[SettingsDialog] Connected to " + connection.getHost());
} catch (XMPPException ex) {
Log.e("XMPPClient", "[SettingsDialog] Failed to connect to "
+ connection.getHost());
Log.e("XMPPClient", ex.toString());
xmppClient.setConnection(null);
}
try {
connection.login(username, password);
Log.i("XMPPClient", "Logged in as " + connection.getUser());
// Set the status to available
Presence presence = new Presence(Presence.Type.available);
connection.sendPacket(presence);
xmppClient.setConnection(connection);
} catch (XMPPException ex) {
Log.e("XMPPClient", "[SettingsDialog] Failed to log in as "
+ username);
Log.e("XMPPClient", ex.toString());
xmppClient.setConnection(null);
}
现在,我可以使用此代码连接Google聊天服务器。我也可以在Ubuntu上将本地服务器与Spark客户端连接起来。但无法与Android上的本地服务器连接。
其中主机为10.0.2.2(Android localhost) 端口 5222 服务 localhost
Android客户端可以成功连接本地服务器,但我无法登录
我收到的错误sasl authentication failed using mechanism digest-md5
我正在搜索过去两天并尝试了很多东西,但本地服务器没有成功。
答案 0 :(得分:-1)
尝试连接:
public static boolean XMPPConnect() {
try {
System.setProperty("java.net.preferIPv6Addresses", "false");
//SmackConfiguration.setPacketReplyTimeout(30000);
config = new ConnectionConfiguration(Constant._hostName, port);
//config = new AndroidConnectionConfiguration(Constant._hostName);
// config.setCompressionEnabled(true);
// config.setSASLAuthenticationEnabled(true);
// SmackConfiguration.setPacketReplyTimeout(1000*60);
// config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
// config.setReconnectionAllowed(true);
// //config.setCompressionEnabled(true);
config.setRosterLoadedAtLogin(true);
config.setSendPresence(true);
//SASLAuthentication.supportSASLMechanism("MD5");
config.setSASLAuthenticationEnabled(true);
config.setCompressionEnabled(true);
config.setSecurityMode(SecurityMode.enabled);
config.setReconnectionAllowed(true);
SmackConfiguration.setPacketReplyTimeout(30000);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
config.setTruststoreType("AndroidCAStore");
config.setTruststorePassword(null);
config.setTruststorePath(null);
}/*else if (Build.VERSION.SDK_INT<19 || Build.VERSION.SDK_INT>= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
}*/ else {
config.setTruststoreType("BKS");
String path = System.getProperty("javax.net.ssl.trustStore");
if (path == null)
path = System.getProperty("java.home") + File.separator + "etc"
+ File.separator + "security" + File.separator
+ "cacerts.bks";
config.setTruststorePath(path);
}
connection = new XMPPConnection(config);
config.setSASLAuthenticationEnabled(true);
connection.connect();
debugEnabledReset();
} catch (Exception e) {
XMPPConstants.XMPP_ERROR="socket_timeout";
e.printStackTrace();
if(connection.DEBUG_ENABLED==true)
connection.DEBUG_ENABLED = false;
return false;
}
return true;
}
如果返回true,则登录xmpp如下:
public static boolean XMPPLogin(String uname, String password) {
Roster roster = connection.getRoster();
roster.addRosterListener(new RosterListener() {
public void presenceChanged(Presence arg0) {}
public void entriesUpdated(Collection<String> arg0) {}
public void entriesDeleted(Collection<String> arg0) {}
public void entriesAdded(Collection<String> arg0) {}
});
try {
//SASLAuthentication.supportSASLMechanism("MD5", 0);
connection.login(uname, password, "Smack");
} catch (Exception e) {
XMPPConstants.XMPP_ERROR="Username or password is incorrect";
if(e.getMessage().toString().contains("No response")){
XMPPConstants.XMPP_ERROR="Server communication failed";
}
e.printStackTrace();
if(connection.DEBUG_ENABLED==true)
connection.DEBUG_ENABLED = false;
return false;
}
return true;
}