Socket无限SocketTimeoutException真凶–WLAN助手

Socket无限SocketTimeoutException真凶–WLAN助手看到标题你可能不知道我说的是什么鬼东西,但是如果你有类似的经历的话,那么恭喜你,也恭喜我自己,终于解决这个问题了。用过小米、华为等手机的都知道,当我们连接上一个不能上网的WIFI时,系统都会友好的给出“此WLAN无法访问互联网,请更换网络/切换为移动数据网络”等类似的提示,今天我就说下本人在这里面遇到的坑。背景:有个Android项目需要连接硬件设备的WIFI,然后通过socket进行通信…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新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也是心累,也希望小米的工程师能优化下这个问题。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179424.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 借助栈来实现单链表的逆置运算_中缀后缀表达式互相转换

    借助栈来实现单链表的逆置运算_中缀后缀表达式互相转换原题链接算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 – * + 8 4 / +注意

    2022年8月8日
    2
  • 常用信息收集方法[通俗易懂]

    常用信息收集方法[通俗易懂]信息收集的种类信息收集分为被动收集和主动收集两种方式。被动信息收集:利用第三方的服务对目标进行访问:Google搜索、Shodan搜索、其他综合工具,被动信息收集是指京可能多低收集与目标相关的信息主动信息收集:通过直接扫描目标主机或者网站,主动方式能获取更多的信息,目标系统可能会记录操作信息。在信息收集中,需要收集的信息:目标主机的DNS信息、目标IP地址、子域名、旁站和C段、CMS类型、敏感目录、端口信息、操作系统版本、网站架构、漏洞信息、服务器与中间件信息、邮箱、人员、地址等。在信息收集中

    2022年6月17日
    70
  • 记一次不在状态的大疆面试

    记一次不在状态的大疆面试之前写博客也有不少,但一直没有一个固定的地方,csdn,博客园,eoe,oschina都写过一些,但没有长期固定的去记录,自己开的博客站也因为忘记续费而被停掉,数据也丢了…希望在简书能坚持记录一些技术上的东西,刚好昨天在大疆面试完,就以大疆作为简书博客的开端吧11月初有前同事内推大疆Android开发的机会,就发了一份简历过去试试。大概一个星期,收到了…

    2022年6月22日
    32
  • Ljava/lang/Iterable与AbstractMethodError

    Ljava/lang/Iterable与AbstractMethodErrorjava.lang.AbstractMethodError:com.example.demo.repository.UserRepositoryImpl.findAll()Ljava/lang/Iterable; atorg.springframework.data.repository.CrudRepository$$FastClassBySpringCGLIB$$b5a31e6f.invo…

    2022年5月18日
    37
  • dfa算法c语言,用c语言采用模拟dfa算法编写一个扫描器.docx

    用C语言米用模拟DFA算法编写一个扫描器/*第一章:相关知识DFA定义:一个确定的有穷自动机(DFA)M是一个五元组:M=(K,厶f,S,Z)其中0K是一个有穷集,它的每个元素称为一个状态;工是一个有穷字母表,它的每个元素称为一个输入符号,所以也称工为输入符号字母表;f是转换函数,是KX》tK的映射,即,如f(ki,a)=kj,(ki€K,kj€K)就意味着,当前状态…

    2022年4月8日
    37
  • JVM类加载原理学习笔记

    JVM类加载原理学习笔记

    2020年11月12日
    171

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号