4

这是关于在这里发帖的

我可以将我的 PC 连接到本地的本地 tigase 服务器设置(我正在使用 Smack API)。现在,当我想通过 Wi-Fi 将 Android 手机连接到该服务器时,我遇到了问题。我可以使用客户端 Beem for android 连接到本地服务器。我的 XMPP 服务器域名是我的 PC 名称“mwbn43-1”,IP 地址是“192.168.0.221”(我可以从安卓终端模拟器)。在 Beem 设置中有一个高级选项,我可以在其中指定要连接的服务器(我已将其作为 IP 地址给出)。如果我不设置此选项,我将无法连接。现在这里是片段我用于我的 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)时,我得到“无响应”来自带有流的服务器错误:错误(主机未知),当我给出主机名(mwbn43-1)时,我得到主机未解析的“远程服务器超时(504)”。

我查看了 Beem 的代码,看看它是如何与服务器连接的,但找不到太多。我还授予了 Internet 的用户权限。谁能告诉我应该添加哪些代码行来与本地服务器通信。

4

5 回答 5

6

尝试 3 参数 ConnectionConfiguration 构造函数。它让你声明主机、端口和域。主机和域不必是相同的值。在你的情况下,我猜:

ConnectionConfiguration config = 
  new ConnectionConfiguration("192.168.0.221",5222,"mwbn43-1");
于 2010-10-09T07:05:52.453 回答
2

尝试从登录调用中删除主机名。

例如,使用

connection.login("username", "password");

代替

connection.login("username@host.com", "password");
于 2011-12-27T05:23:37.167 回答
0

检查您是否声明了正确的权限:android.permission.INTERNET

于 2013-06-26T13:47:31.457 回答
0

确保您没有使用原生 smack jar,它无法在 android 上运行尝试使用 asmack 或其祖先之一android-and-xmpp-currently-available-solutions

于 2011-12-28T19:11:12.727 回答
0

对ConnectionConfiguration使用三参数构造函数。并在没有主机名扩展的情况下传递凭据。

例如,看下面的代码:

ConnectionConfiguration config = new ConnectionConfiguration("hostname/IP address", 5222, "servicename/domainname");  
connection = new XMPPConnection(config);  
connection.connect();  
connection.login("user1", "password");`
于 2012-03-20T03:28:27.420 回答