无法将 Android 客户端与本地 XMPP 服务器连接
Posted
技术标签:
【中文标题】无法将 Android 客户端与本地 XMPP 服务器连接【英文标题】:Not able to connect Android client with local XMPP server 【发布时间】:2010-06-11 16:05:24 【问题描述】:这是关于帖子here
我能够将我的 PC 连接到本地设置的本地 tigase 服务器(我正在使用 Smack API)。现在,当我想通过 Wi-Fi 将 android 手机连接到该服务器时,我遇到了问题。我可以使用客户端 Beem for android 连接到本地服务器。我的 XMPP 服务器域名是我的 PC 名称“mwbn43-1”,IP 地址是“192.168.0.221”(我可以从安卓终端模拟器)。在 Beem 设置中有一个高级选项,我可以在其中指定要连接的服务器(我已将其作为 IP 地址给出)。如果我不设置此选项,我将无法连接。现在这里是 sn-p我用于我的 android 客户端的代码。
XMPPConnection.DEBUG_ENABLED = true;
ConnectionConfiguration config = new ConnectionConfiguration("mwbn43-1",5222);
//ConnectionConfiguration config = new ConnectionConfiguration("192.168.0.221",5222);
config.setSASLAuthenticationEnabled(false);
config.setCompressionEnabled(false);
XMPPConnection xmpp = new XMPPConnection(config);
try
xmpp.connect();
xmpp.login("admin@mwbn43-1", "tigase");
String host = xmpp.getHost();
String id = xmpp.getConnectionID();
int port = xmpp.getPort();
boolean i = false;
i = xmpp.isConnected();
if(i)
answer = "Connected to " + host + " via port " + port + " with ID " + id;
answerfield.setText(answer);
//end try
catch (XMPPException e)
answerfield.setText("Failed to connect");
Log.v(TAG, "Failed to connect to " + xmpp.getHost());
e.printStackTrace();
借助此代码,我还可以连接到 google talk 服务器。在与本地服务器建立连接时,我尝试提供 IP 地址和主机名进行连接。当我提供 IP 地址(192.168.0.221)时,我得到了'No response from server error' with stream:error(host-unknown),当我给出主机名(mwbn43-1)时,我得到'remote-server-timeout(504)',主机未解析。
我查看了 Beem 的代码,看看它是如何与服务器连接的,但找不到太多。我还授予了 Internet 用户权限。谁能告诉我应该添加哪些代码行来与本地服务器通信.
【问题讨论】:
可能是 Tigase 问题。由于出现“主机未知”错误,我无法从 Pidgin 和 Empathy 连接到我的 Tigase 服务器。它曾经在 jabberd 中工作。 这个解决方案对我有用!如果您使用 Android 设备连接到 XMPP 服务器(在我的情况下为 ejabberd),则必须使用 ASmack jar 而不是 Smack jar。如果您的 XMPP 服务器安装在本地并且通过 WIFI 连接,则需要使用 3 参数 ConnectionConfiguration 构造函数。第一个参数 HOST 需要您的本地 WIFI IP 地址(要非常小心),第二个参数端口将是 5222,第三个参数应该是您在安装时创建的 XMPP 服务器名称。然后对于 connection.login("username", "password") 您可以简单地使用用户名,例如 admin。 'remote-server-timeout' exception as I try to connect to the server的可能重复 【参考方案1】:尝试 3 参数 ConnectionConfiguration 构造函数。它让你声明主机、端口和域。主机和域不必是相同的值。在你的情况下,我猜:
ConnectionConfiguration config =
new ConnectionConfiguration("192.168.0.221",5222,"mwbn43-1");
【讨论】:
我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗? 没有线索。将其作为另一个问题提出。 感谢您的关注,已通过 this 解决方案解决【参考方案2】:尝试从登录调用中删除主机名。
例如, 使用
connection.login("username", "password");
而不是
connection.login("username@host.com", "password");
【讨论】:
@Hitesh Patel 我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗?【参考方案3】:ConnectionConfiguration 使用三参数构造函数。并在没有主机名扩展的情况下传递凭据。
例如,看下面的代码:
ConnectionConfiguration config = new ConnectionConfiguration("hostname/IP address", 5222, "servicename/domainname");
connection = new XMPPConnection(config);
connection.connect();
connection.login("user1", "password");`
【讨论】:
【参考方案4】:确保你没有使用原生 smack jar,它不会在 android 上运行尝试使用 asmack 或其祖先之一android-and-xmpp-currently-available-solutions
【讨论】:
【参考方案5】:检查您是否声明了正确的权限: android.permission.INTERNET
【讨论】:
我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗?以上是关于无法将 Android 客户端与本地 XMPP 服务器连接的主要内容,如果未能解决你的问题,请参考以下文章
如何创建nodejs xmpp服务器和android xmpp客户端