无法与 aSmack 4.0.2 建立新连接

Posted

技术标签:

【中文标题】无法与 aSmack 4.0.2 建立新连接【英文标题】:Can't establish a new connection with aSmack 4.0.2 【发布时间】:2014-08-11 12:58:53 【问题描述】:

我正在学习 android 编程,这几天我一直在尝试解决这个问题。我正在编写应该连接到 XMPP 服务器的 Android 应用程序。我总是遇到同样的错误,我真的不知道我做错了什么。我试过用谷歌找到的示例代码,但也无法与它们建立连接。

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Context context = getApplicationContext();
    SmackAndroid.init(context);

    ConnectionConfiguration ConnectionConfiguration = new ConnectionConfiguration("192.168.0.101", 5222);
    ConnectionConfiguration.setDebuggerEnabled(true);
    XMPPConnection connection = new XMPPTCPConnection(ConnectionConfiguration);


  try 
    connection.connect();
 catch (ConnectionException e) 
    Log.e("ERROR", "ConnectionException", e);
    for (int i = 0; i < e.getFailedAddresses().size(); i++) 
        HostAddress element = e.getFailedAddresses().get(i);
        Log.e("ERROR", element.getErrorMessage().toString());
    
 catch (Exception e) 
    Log.e("ERROR", "Exception", e);

   // Log into the server
   try 
    connection.login("user", "password", "SomeResource");
    catch (Exception e) 
        // TODO Auto-generated catch block
        e.printStackTrace();
    

这是我遇到的错误:

08-11 15:48:27.476: E/ERROR(11117): ConnectionException
08-11 15:48:27.476: E/ERROR(11117): org.jivesoftware.smack.SmackException$ConnectionException
08-11 15:48:27.476: E/ERROR(11117):     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:433)
08-11 15:48:27.476: E/ERROR(11117):     at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:808)
08-11 15:48:27.476: E/ERROR(11117):     at org.jivesoftware.smack.XMPPConnection.connect(XMPPConnection.java:396)
08-11 15:48:27.476: E/ERROR(11117):     at com.example.gps_pubsub.MainActivity.onCreate(MainActivity.java:34)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.Activity.performCreate(Activity.java:5047)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2056)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2117)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.ActivityThread.access$700(ActivityThread.java:134)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1218)
08-11 15:48:27.476: E/ERROR(11117):     at android.os.Handler.dispatchMessage(Handler.java:99)
08-11 15:48:27.476: E/ERROR(11117):     at android.os.Looper.loop(Looper.java:137)
08-11 15:48:27.476: E/ERROR(11117):     at android.app.ActivityThread.main(ActivityThread.java:4867)
08-11 15:48:27.476: E/ERROR(11117):     at java.lang.reflect.Method.invokeNative(Native Method)
08-11 15:48:27.476: E/ERROR(11117):     at   java.lang.reflect.Method.invoke(Method.java:511)
08-11 15:48:27.476: E/ERROR(11117):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007)
08-11 15:48:27.476: E/ERROR(11117):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774)
08-11 15:48:27.476: E/ERROR(11117):     at dalvik.system.NativeStart.main(Native Method)
08-11 15:48:27.476: E/ERROR(11117): 192.168.0.101:5222 Exception: null

我还检查了防火墙是否允许连接,并尝试连接到 hosts.im 服务而不是家庭服务器,结果相同。

I have this line added to MANIFEST:
<uses-permission android:name="android.permission.INTERNET"/>

【问题讨论】:

让我猜猜:您正在运行 Android 模拟器,“192.168.0.101”是运行模拟器的系统的 IP。模拟器可能无法连接到该IP吗? ConnectionException 表示 Smack 无法连接到配置的 IP/端口。 感谢您的回复。不,我没有运行模拟器。我正在尝试用手机连接到服务器。 ping 到 ip 地址可以正常工作,从手机远程登录到 ip 地址和端口 5222 也可以正常工作。 捕获 ConnectionException 并在其上调用 getFailedAddresses(),然后在返回的每个 HostAddress 上调用 getException(),并通过编辑帖子中的信息向我们展示该异常的堆栈跟踪。跨度> @Makko - 我也面临同样的问题。连接到聊天服务器时出现 1XX.XXX.X.XXX:5222 异常:null。它最初连接但一段时间后,我收到此错误。如果您找到解决方案,您能帮帮我吗? ***.com/questions/26497773/… 我的问题的链接。 【参考方案1】:

我遇到了同样的问题,但在这里找到了解决方案: SImple Asmack program not working

解决方法是将连接代码放到单独的线程中。

public static final String HOST = "208.68.163.218"; //write your host name
public static final int PORT = 5222;

@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    connect();


public void connect() 
    Thread t = new Thread(new Runnable() 

        @Override
        public void run() 
            Context context = getApplicationContext();
            SmackAndroid.init(context);
            ConnectionConfiguration ConnectionConfiguration = new ConnectionConfiguration(HOST, PORT);
            ConnectionConfiguration.setDebuggerEnabled(true);
            XMPPConnection connection = new XMPPTCPConnection(ConnectionConfiguration);     

            try 
                connection.connect();
             catch (ConnectionException e) 
                e.printStackTrace();
             catch (SmackException e) 
                e.printStackTrace();
             catch (IOException e) 
                e.printStackTrace();
             catch (XMPPException e) 
                e.printStackTrace();
            
        
    );
    t.start();

【讨论】:

@TAvenger 我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗?【参考方案2】:

即使代码的连接部分位于新线程中,我也会遇到此异常。 这是由于没有打开我的物理 Android 设备上的互联网连接(通过 wifi 或移动数据网络)(我使用它通过 USB 电缆连接到我的笔记本电脑)(不知道是否可以在没有模拟器的情况下使用连接,没有测试)。我发现这个异常是由 api 结构深处的方法抛出的:

connect failed: ENETUNREACH (Network is unreachable)

LogCat 中没有显示此异常,但最终在阅读了 Flow 对此问题的评论后,我在 HostAddress 列表中找到了它。

也许这可以避免像我这样拼命寻找代码中的问题的人。

【讨论】:

这发生在特定设备上,例如 Honor holly、Sony C4 和 Micromax 设备。如果有人找到解决方案,请告诉我...

以上是关于无法与 aSmack 4.0.2 建立新连接的主要内容,如果未能解决你的问题,请参考以下文章

无法建立新连接 Discord.py

使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

无法在 Android 设备上使用 asmack 15 登录 Google Talk

怎么用c#代码在sql中建立新的数据库?

远程桌面连接已断开 客户端无法连接。您已连接到这台计算机的控制台。无法建立新的控制台会话。

金蝶KIS旗舰版提示:所选账套无效,无法建立数据库连接