大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE稳定放心使用
看到标题你可能不知道我说的是什么鬼东西,但是如果你有类似的经历的话,那么恭喜你,也恭喜我自己,终于解决这个问题了。
用过小米、华为等手机的都知道,当我们连接上一个不能上网的WIFI时,系统都会友好的给出 “此WLAN无法访问互联网,请更换网络/切换为移动数据网络” 等类似的提示,今天我就说下本人在这里面遇到的坑。
背景
有个Android项目需要连接硬件设备的WIFI,然后通过socket进行通信,我这边已经开发完成,也测试过功能都是没问题的,然后给客户那边测试,客户那边有台手机打死连接不上设备。
首先确认代码是没问题的,在其他多台手机上跑也是正常的。
另外就是在连接设备(不是指连接硬件设备发射 的WiFi,而是指通过TCP进行长连接通信)前需要先进行UDP广播,通过广播找到设备相关,获取设备信息,这一步也没问题。
然后在拿到设备的IP和端口后,进行TCP长连接,问题就卡在这里了,一直是SocketTimeoutException 连接超时,试过无数办法也没用,无奈只要让客户把手机寄过来,现场调试。
问题手机信息:小米4,Android 6.0,MIUI9.6。
调试流程
硬件设备在发射WIFI信号时,去连接这个WIFI(这个WIFI是没网的),然后手机连接WIFI成功了,这里注意是连接成功了,然后过几秒提示“此WLAN网络无法访问互联网”,这个提示是在手机通知栏提示的(有些手机是直接弹窗提示的),当时没在意,然后连接TCP,连不上,因为之前测过多次,基本认定出现这问题跟手机有关,所以我把注意放到这个提示上了,我点击了提示,选择了“使用此WLAN”按钮,然后再起尝试连接TCP,神奇的事情发生了,这次连接成功了,然后又尝试了多次,总结出规律:
只要在WLAN设置界面开启了“WLAN助理 (在WLAN连接不佳加时智能选择WLAN或移动数据网络)”**,就会在通知栏弹提示,这时候所有的TCP连接都将失败(ping也ping不通,具体原因不明,有知道的大佬望解答),但是UDP连接却没问题,将WLAN助理 关闭后,在连接该WIFI,就不会有这样的提示了,这时候TCP连接就完全正常。
这个bug困扰了一周,总算是找到问题解决了。我不知道是不是只有这一个还是这一批手机都是这样的,因为我拿别的小米手机(MIX2S、红米4等)和华为手机(荣耀9,Mate7)虽然有这样的无法连接网络的提示,但是都没有无法连接TCP这样的问题。
遇到这样的BUG也是心累,也希望小米的工程师能优化下这个问题。
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/179424.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...