使用 smack 的 Android XMPP:服务器没有响应

Posted

技术标签:

【中文标题】使用 smack 的 Android XMPP:服务器没有响应【英文标题】:Android XMPP using smack: No response from server 【发布时间】:2013-07-05 20:34:54 【问题描述】:

我正在尝试制作一个使用 XMPP 向 gmail 帐户发送消息的应用程序。我找到了一个提到 Google XMPP 服务器名称的链接,但我认为我无法建立连接。

编辑我更改了服务器的名称,我相信它能够建立连接。但它说名册有 0 个条目。我正在尝试使用 gmail 帐户登录。我得到的新异常:

07-05 14:02:05.099: W/System.err(13903): java.security.KeyStoreException: java.security.NoSuchAlgorithmException: KeyStore jks implementation not found
07-05 14:02:05.099: W/System.err(13903):    at java.security.KeyStore.getInstance(KeyStore.java:119)
07-05 14:02:05.099: W/System.err(13903):    at org.jivesoftware.smack.ServerTrustManager.<init>(ServerTrustManager.java:70)
07-05 14:02:05.099: W/System.err(13903):    at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:824)
07-05 14:02:05.099: W/System.err(13903):    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:267)
07-05 14:02:05.099: W/System.err(13903):    at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
07-05 14:02:05.099: W/System.err(13903):    at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)
07-05 14:02:05.099: W/System.err(13903): Caused by: java.security.NoSuchAlgorithmException: KeyStore jks implementation not found
07-05 14:02:05.099: W/System.err(13903):    at org.apache.harmony.security.fortress.Engine.notFound(Engine.java:177)
07-05 14:02:05.099: W/System.err(13903):    at org.apache.harmony.security.fortress.Engine.getInstance(Engine.java:151)
07-05 14:02:05.099: W/System.err(13903):    at java.security.KeyStore.getInstance(KeyStore.java:116)
07-05 14:02:05.099: W/System.err(13903):    ... 5 more

这是原来的例外:

07-05 13:30:23.444: W/System.err(12434):    at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:306)
07-05 13:30:23.454: W/System.err(12434):    at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44)
07-05 13:30:23.454: W/System.err(12434):    at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:76)
07-05 13:30:38.229: D/Smack(12434): Start Login
07-05 13:30:43.235: E/Smack(12434): Error: No response from the server.
07-05 13:30:43.235: W/System.err(12434): No response from the server.: 
07-05 13:30:43.235: W/System.err(12434):    at org.jivesoftware.smack.NonSASLAuthentication.authenticate(NonSASLAuthentication.java:58)
07-05 13:30:43.235: W/System.err(12434):    at org.jivesoftware.smack.SASLAuthentication.authenticate(SASLAuthentication.java:232)
07-05 13:30:43.245: W/System.err(12434):    at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:341)
07-05 13:30:43.245: W/System.err(12434):    at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:301)
07-05 13:30:43.255: W/System.err(12434):    at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:283)
07-05 13:30:43.255: W/System.err(12434):    at com.example.xmpp.MessageTask.doInBackground(MessageTask.java:33)
07-05 13:30:43.255: W/System.err(12434):    at com.example.xmpp.MessageTask.doInBackground(MessageTask.java:1)
07-05 13:30:43.265: W/System.err(12434):    at android.os.AsyncTask$2.call(AsyncTask.java:287)
07-05 13:30:43.265: W/System.err(12434):    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
07-05 13:30:43.275: W/System.err(12434):    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
07-05 13:30:43.275: W/System.err(12434):    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
07-05 13:30:43.275: W/System.err(12434):    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
07-05 13:30:43.285: W/System.err(12434):    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
07-05 13:30:43.285: W/System.err(12434):    at java.lang.Thread.run(Thread.java:856)

这是我的代码:

ConnectionConfiguration config = new ConnectionConfiguration("xmpp.l.google.com", 5222);
        XMPPConnection connection =  new XMPPConnection(config);
        try 
            Log.d("Smack", "Start Connect");
            connection.connect();
            Log.d("Smack", "Start Login");
            connection.login(user, pwd);
            Roster roster = connection.getRoster();
            //Get all rosters
            Collection<RosterEntry> entries = roster.getEntries();
            //loop through
            Log.d("Smack", "Start Rosters");
            for (RosterEntry entry : entries) 
            //example: get presence, type, mode, status
            Presence entryPresence = roster.getPresence(entry.getUser());
              String status = entryPresence.getStatus();
              Toast.makeText(context, status, Toast.LENGTH_LONG).show();
              Log.d("Smack", "Print rosters");
            
            Log.d("Smack", "End Rosters");

         catch (XMPPException e) 
            // TODO Auto-generated catch block
            Log.e("Smack", "Error: " + e.getMessage());
            e.printStackTrace();
        

【问题讨论】:

您是否尝试过使用 Google 以外的其他 XMPP 服务器对其进行测试? Google 开始为其环聊应用程序从 XMPP 切换到新协议。 试试 xmpp.l.google.com,告诉我它是否有效 我在该服务器上进行了尝试,但出现了我在上面发布的异常。我只是使用了错误的谷歌服务器吗?我目前正在尝试使用谷歌帐户登录。 有一个名为 Beem 的项目,它也使用 asmack 进行 XMPP 连接,它是开源的。您可以尝试一下,看看它是否仍然适用于 Google Talk。 beem-project.com/projects/beem/files Smack "No Response From Server". Not sure why am i getting this error的可能重复 【参考方案1】:

您可以尝试查看这些问题。可能有关系

https://***.com/a/11716952/984466

Does android support .jks keystore type?

How to enable a self-signed certificate for SSL sockets on Android?

【讨论】:

太棒了,第一个链接解决了我的问题。 @Vannen 我遵循这种方式,它在信任存储路径中显示错误,在 java.io.File.fixSlashes(File.java:185) 的 java.io.File.fixSlashes(File.java:185) 的 java.lang.NullPointerException 中抛出 NPE .File.(File.java:134) 在 java.io.FileInputStream.(FileInputStream.java:105) 在 org.jivesoftware.smack.ServerTrustManager.(ServerTrustManager.java:62) 在org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:839)

以上是关于使用 smack 的 Android XMPP:服务器没有响应的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smack Android 将字符串转换为 XMPP 节

如何为 xmpp 实现 smack

Smack XMPP android 连接时崩溃

使用 Openfire 服务器和 XMPP(SMACK)客户端的 Android 聊天应用程序 [关闭]

使用 smack 的 Android XMPP:服务器没有响应

无法使用 Smack 4.1 从 Android 连接 apache vysper XMPP 服务器