默认
发表评论 7
想开发IM:买成品怕坑?租第3方怕贵?找开源自已撸?尽量别走弯路了... 找站长给点建议
[已解决] 使用安卓端MobileIMSDK,退出时总报socket closed异常,这什么情况?
阅读(47723) | 评论(7 收藏 淘帖1
我使用的是LocalUDPDataSender.getInstance(activity).sendLoginout()这个方法进行退出操作。结果总是报下面的异常。

W/LocalUDPDataReciever: 【IMCORE】本地UDP监听停止了(socket被关闭了?),Socket closed
                       java.net.SocketException: Socket closed
                 at libcore.io.Posix.recvfromBytes(Native Method)
                at libcore.io.Posix.recvfrom(Posix.java:189)
                 at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
                 at libcore.io.IoBridge.recvfrom(IoBridge.java:549)
                 at java.net.PlainDatagramSocketImpl.doRecv(PlainDatagramSocketImpl.java:163)
                  at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:171)
                   at java.net.DatagramSocket.receive(DatagramSocket.java:274)
                 at net.openmob.mobileimsdk.android.core.LocalUDPDataReciever.p2pListeningImpl(LocalUDPDataReciever.java:150)
              at net.openmob.mobileimsdk.android.core.LocalUDPDataReciever.access$1(LocalUDPDataReciever.java:136)
            at net.openmob.mobileimsdk.android.core.LocalUDPDataReciever$1.run(LocalUDPDataReciever.java:114)
              at java.lang.Thread.run(Thread.java:818)

即时通讯网 - 即时通讯开发者社区! 来源: - 即时通讯开发者社区!

标签:MobileIMSDK
上一篇:[已回复] 求教MobileIMSDK中IM离线消息处理方法下一篇:[已回复] 请问MobileIMSDK是否支持ipv6的网络

本帖已收录至以下技术专辑

推荐方案
评论 7
这个是正常的,因为原本正常运行的情况下是处于socket的阻塞监听状态,现在主动断开时监听就收到了这个close信号了。准确地说,这不算什么异常,但官方API里是以异常的方式抛出了,也就让他抛出,没有关系,不会产生任何影响。
引用:JackJiang 发表于 2017-09-13 18:25
这个是正常的,因为原本正常运行的情况下是处于socket的阻塞监听状态,现在主动断开时监听就收到了这个clos ...

对了,我还遇到一个问题,就是我在安卓的第一个activity控制器里使用IMClientManager.getInstance(this).initMobileIMSDK()进行了初始化。然后在下面接着进行判断是否保存过登录信息,如果保存了就直接调用登录动作。可是却无法登录成功,控制台显示发送登录请求成功了,但登录回调没有信息返回。我在苹果开发时同样也是按这个逻辑写的。先初始化,然后接着自动登录是没问题的。
09-13 05:53:58.737 30537-30537/com.example.heavenk.heavenkp01 E/ClientCoreSDK: 【IMCORE】【本地网络通知】检测本地网络已连接上了!
09-13 05:53:58.737 30537-30537/com.example.heavenk.heavenkp01 D/LocalUDPSocketProvider: 【IMCORE】正在closeLocalUDPSocket()...
09-13 05:53:58.738 30537-30537/com.example.heavenk.heavenkp01 I/TAG: 数据发送成功!
09-13 05:53:58.739 30537-30599/com.example.heavenk.heavenkp01 D/LocalUDPDataReciever: 【IMCORE】本地UDP端口侦听中,端口=0...
09-13 05:53:58.739 30537-30599/com.example.heavenk.heavenkp01 D/LocalUDPSocketProvider: 【IMCORE】isLocalUDPSocketReady()==false,需要先resetLocalUDPSocket()...
09-13 05:53:58.739 30537-30599/com.example.heavenk.heavenkp01 D/LocalUDPSocketProvider: 【IMCORE】正在closeLocalUDPSocket()...
09-13 05:53:58.739 30537-30599/com.example.heavenk.heavenkp01 D/LocalUDPSocketProvider: 【IMCORE】Socket处于未初化状态(可能是您还未登陆),无需关闭。
09-13 05:53:58.739 30537-30599/com.example.heavenk.heavenkp01 D/LocalUDPSocketProvider: 【IMCORE】new DatagramSocket()中...
09-13 05:53:58.739 30537-30599/com.example.heavenk.heavenkp01 D/LocalUDPSocketProvider: 【IMCORE】new DatagramSocket()已成功完成.

引用:heavenK 发表于 2017-09-14 08:36
对了,我还遇到一个问题,就是我在安卓的第一个activity控制器里使用IMClientManager.getInstance(this). ...

Android跟ios有点点不一样,android上的initMobileIMSDK()方法的调用是有讲究的,你看看我在这个贴子里4楼跟后面楼层里的回复,你仔细理解一下:http://www.52im.net/thread-1002-1-1.html
引用:JackJiang 发表于 2017-09-14 10:26
Android跟ios有点点不一样,android上的initMobileIMSDK()方法的调用是有讲究的,你看看我在这个贴子里4 ...

我已经把两个动作分开了,init写在onCreate里。自动登录写在onActivityCreated,可还是报一样的问题。
引用:JackJiang 发表于 2017-09-14 10:26
Android跟ios有点点不一样,android上的initMobileIMSDK()方法的调用是有讲究的,你看看我在这个贴子里4 ...

用一个另类的方法解决了。我又建了一个启动activity。然后把初始化写在启动activity的onCreate里了。然后在第一个界面上写自动登录动作。这样就正常了。
引用:heavenK 发表于 2017-09-14 11:06
用一个另类的方法解决了。我又建了一个启动activity。然后把初始化写在启动activity的onCreate里了。然后 ...

最佳实现是把initMobileIMSDK写到Appication里。之所以要尽可能先调用initMobileIMSDK()方法,就上我上面让你看的贴子里写的一样:就是因为Android的网络事件通知有延迟,而MobileIMSDK需要这个网络事件。
引用:JackJiang 发表于 2017-09-14 11:10
最佳实现是把initMobileIMSDK写到Appication里。之所有要尽可能先调用initMobileIMSDK()方法,就上我上面 ...

嗯,多谢了。
打赏楼主 ×
使用微信打赏! 使用支付宝打赏!

返回顶部