精华内容
下载资源
问答
  • abstract:java中用于...而final修饰类不能被继承,final修饰的方法不能被重写,因此final与abstract永远不能共存。 2.abstract不能修饰成员变量,不能用于修饰局部变量,即没有抽象变量,没有抽象成员变量等说法;...

    abstract:java中用于修饰抽象类和抽象方法的关键字

    1.abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现(即重写)。而final修饰类不能被继承,final修饰的方法不能被重写,因此final与abstract永远不能共存。

    2.abstract不能修饰成员变量,不能用于修饰局部变量,即没有抽象变量,没有抽象成员变量等说法;abstract也不能修饰构造器,没有抽象构造器,抽象类中的构造器只能是普通的构造器。

    3.static修饰一个方法时,表明这个方法属于类本身,即通过类就可以调用该方法,如果该方法被定义成抽象方法,则将导致通过该类来调用该方法时出现错误(调用一个没有方法体的方法)。因此static 和 abstract 不能同时修饰某个方法,即没有所谓的类抽象方法。

    注意:static和abstract并不是绝对互斥的,static和abstract虽然不能同时修饰某个方法,但是可以同时修饰内部类

    4.abstract关键字修饰的方法必须由子类继承重写才有意义,否则这个方法永远不会有方法体,因此abstract方法不能定义为private访问权限,即private和abstract不能同时修饰方法。

    展开全文
  • 出口只用一个公网 IP 地址,局域网内部占用大量地址也没关系,用户在自己的 Wi-Fi 网络下管理这些设备都很方便,而用 5G 势必会占用更多公网的 IP 地址。   网络容量  带宽 x 频谱效率 x 终端数量 = 总容量...

    (本文部分内容借鉴于网络上的观点)

    首先,需要思考一个问题,为什么要 Wi-Fi 6(802.11ax)?

          802.11ax 设计之初就是为了适用于高密度无线接入和高容量无线业务,比如室外大型公共场所、高密场馆、室内高密无线办公、电子教室等场景。高密高带宽应用场景在这些场景中,接入 Wi-Fi 网络的客户端设备将呈现巨大增长,另外,还在不断增加的语音及视频流量也对 Wi-Fi 网络带来调整,根据预测,到 2020 年全球移动视频流量将占移动数据流量的 50%以上,其中有 80%以上的移动流量将会通过 Wi-Fi 承载。

            我们都知道 4K 视频流(带宽要求 30Mbps/人)、语音流(时延小于 30ms)、VR 流(带宽要求50Mbps/人,时延有小于 15ms)对带宽和时延是十分敏感的,如果网络拥塞或重传导致传输延时,将对用户体验带来较大影响。而现有的 Wi-Fi 5(802.11ac)网络虽然也能提供大带宽能力,但是随着接入密度的不断上升,吞吐量性能遇到瓶颈。而 Wi-Fi 6(802.11ax)网络通过 OFDMA、UL MU-MIMO、1024-QAM 等技术使这些服务比以前更可靠,不但支持接入更多的客户端,同时还能均衡每用户带宽。比如说电子教室,以前如果是 100 多位学生的大课授课形式,传输视频或是上下行的交互挑战都比较大,而802.11ax 网络将轻松应对该场景。

           这不是一个新颖的话题,在 1999 年~2000 年间,就有人提出 2G 将替代 Wi-Fi 的观点;2008 年~2009 年也出现了 4G 将代替 Wi-Fi 的猜测;现在又有人开始讨论 5G 代替 Wi-Fi 的话题了。可是,5G 与 Wi-Fi 的应用场景模式是不相同的。Wi-Fi 主要用于室内环境,而 5G 则是一种广域网技术,它在室外的应用场景更多。所以我们相信 Wi-Fi 和 5G 将长期共存下去。

    我们从以下几个角度进一步分析:

    流量费用

    假设 5G 技术取代 Wi-Fi,那么就必须推出无限流量的套餐,否则费用会远远大于宽带的使用的费用,更何况目前宽带的价格一年比一年低,谁也不会去选择更贵的 5G。在目前的 4G 时代无限流量的套餐就是个噱头,三大运营商都纷纷推出过无限流量的套餐,当时流量超出套餐的流量之后,网络会自动将为 2G 模式,最高速度只有 128Kbps,这个速度看视频不如看漫画,因此所谓的无限流量只是个无稽之谈。

    网络覆盖

    5G 网络技术采用的是超高频频谱(5G 网络频段: 24GHz~52GHz;4G 网络频段:1.8GHz~2.6GHz,不包括 2.4GHz),前面已经提到,频率越高衍射现象越弱,穿越障碍的能力也就越弱,所以 5G 信号是很容易衰弱的。如果保持 5G 信号的覆盖需要比 4G 建设更多的基站。而且由于信号的衰减,如果在大楼的内部,隔着几道墙,信号衰减就更加严重了。再有个极端的例子就是地下室,Wi-Fi 网络可以将路由器通过有线连接放入地下室产生信号,但是 5G 网络是不可能覆盖到所有大楼的地下室的,单就这一个弊端,5G 也无法取代 Wi-Fi。另外,现在几乎所有智能设备都有 Wi-Fi 模块,大多数物联网设备也配备了 Wi-Fi 模块,

    出口只用一个公网 IP 地址,局域网内部占用大量地址也没关系,用户在自己的 Wi-Fi 网络下管理这些设备都很方便,而用 5G 势必会占用更多公网的 IP 地址。

     网络容量

           带宽 x 频谱效率 x 终端数量 = 总容量。

          5G 的优点在于它的载波聚合技术,提升了频谱利用率,大大提升了网络容量。在 3G/4G 时代,当用户在人群密集的场所如地铁、车站等地方使用手机上网时,可以明显感觉到上网延迟变大,网速变慢。而在 5G 时代,随着网络容量大幅提升上述现象带来的影响明显降低。也正是这样的特性,让人觉得 5G 网络下可以无限量接入,但很多人忽视了一点,那就是随着物联网时代的到来,入网设备的数量也在大幅提升,如果真的所有的上网设备都直连区域内的基站,这条 5G 高速路再宽也得堵死啊!而要想降低基站塔的负担,就必须依靠 Wi-Fi 来做分流。

      Wi-Fi 速率高于 5G 速率

             移动设备厂商宣传的 5G 最重要的 3 个特征是高速度、大容量、低时延,其实最新一代的 Wi-Fi 速率比 5G 还要快,最新的 802.11ax(Wi-Fi 6)单流峰值速率 1.2Gbps(5G 网络峰值速率 1Gbps),平均来看,Wi-Fi 每升级一代所用的时间大约只是移动网络的一半左右,所以从最新的 Wi-Fi 6 开始,速率会持续领先于移动网络。

      终端类型

            办公、物流、商业、智能家居等各行各业都在走向无线化,首先要做的就是把设备、人员、终端等全部联网使用。假设 5G 替代了 Wi-Fi 的存在,那么未来的所有联网终端都需要配备一张类似手机 SIM 卡的东西才可以上网。这一个理由也注定了目前在室内场景 5G 是不可能取代 Wi-Fi 的。类似的设备还有 VR、游戏机、电子阅读器、机顶盒等等……

      移动端电池耗电

          大家都知道手机、pad 等移动终端都是用的电池,大家通常都认为电池的耐用性与安装的业务,和使用频率有关,但人们往往忽略了一点,终端的各种移动信号接入质量好与差也与电池耗电量有关。当信号变差时,移动终端为了确保给用户提供一个良好的体验,会自动增加发射功率来提升信号质量,这就导致电池耗电量增加。由于 Wi-Fi 的信号源基本是在室内范围,而 5G 信号在室外几十公里外的基站,这样就导致移动终端上传数据时,Wi-Fi 的传送距离远远小于 5G 信号。

           通常情况下 5G 的通信距离是 Wi-Fi 的几千倍以上,这样就需要手机的信号发射强度大大增加,这就增加了耗电量。曾经有人做过实验,以 4G 为例,使用网络数据半小时,Wi-Fi 会比移动网络节省 5%的电量。另外,最新一代的 Wi-Fi 6(802.11ax)支持 TWT 功能,可以在业务需要时自动唤醒,在业务不适用时自动休眠,进一步节省了电量。因此,目前所面临的这些问题使得 5G 还无法彻底取代 Wi-Fi,更多的是与 Wi-Fi 进行深度融合,因此使用 Wi-Fi 的企业和用户并不用过于慌张。今天的 Wi-Fi 已不再是一个提供无线网络的设备,更多的应该被视为企业数字化转型的必备设施或中央枢纽。例如目前绝大部分的智慧零售、智慧物流、智慧办公等解决方案的中央枢纽就是 Wi-Fi 网络。

     

    0.白浪介绍:

    (1)关于射频、微波、天线、无线通信、智能硬件、软件编程、渗透安全、人工智能、区块链、大数据、Java、Android、C/C++、python等综合能力的培养提升。

    (2)各种学习资料、学习软件分享。

     

    1.扫码关注公众号(Geekxiaobai)           

     

    2. 在后台发送“Python高级编程”“Python Graphics”或者“2003”,即可免费获得电子书籍。仅供学习之用。

    3. 扫码关注后,查看往期内容,会有更多资料惊喜等着你来拿哦  

      想要更多相关学习资料,可以在文章后面留言哦,后期将会根据留言需求免费分享学习资料哦。

    ========******=========******========******=========******==========

    展开全文
  • 小白一枚,想要学一下webapi。 现有项目是一个.net mvc的项目,c是利用三层架构实现的,因为觉得ef有点慢。然后现在想用webapi支持移动端的app,那么问题来了。单用webapi也能支持web的正常使用吗?...
  • 这是第146篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读...有关Unity UI 显隐(共存)关系的优化处理方案 UWA GOT Online的Lua分析 场景打Assetbundle导致包量变大 如...

    这是第146篇UWA技术知识分享的推送。今天我们继续为大家精选了若干和开发、优化相关的问题,建议阅读时间10分钟,认真读完必有收获。

    UWA 问答社区:answer.uwa4d.com
    UWA QQ群2:793972859(原群已满员)


    本期目录:

    • 有关Unity UI 显隐(共存)关系的优化处理方案
    • UWA GOT Online的Lua分析
    • 场景打Assetbundle导致包量变大
    • 如何隐藏iPhone X底部横条
    • 如何在Native代码中设置SkinnedMeshRenderer的骨骼Transform

    UI

    Q:有关Unity UI 显隐(共存)关系的优化处理方案,大家一般是怎么处理的呢?
    1. 情形描述:
    情形1:弹窗A中有一个按钮,点击后可以打开弹窗B,然后关掉弹窗A(或者不关掉);
    情形2:弹窗C中有一个按钮,点击后打开了一个全屏面板,隐藏(销毁)掉其他所有UI。

    ......
    2. 问题描述
    类似问题会影响到Overdraw的指标,显隐关系做的不好,会导致过量的渲染倍率,也会造成UI显示逻辑不合理,不易管理。

    各位前辈都是怎么处理类似问题的呢?

    A1:题主你好,这类问题每个项目的具体需求可能会不同,如果策划是逻辑性比较强的,又有负责的UI策划的话,最好是先让策划整理一下需求,程序这边再来制定策略会更合理一些。
    这里提到的需求一般涉及到以下几个问题:

    一、关闭方式

    1. 无限回退,就是说ABC三个界面,可以循环打开,那么在循环打开很多遍以后,通过后退按钮,也会按照打开的顺序后退这么多遍,才能回到主界面。(依稀记得崩3就是这种)
    2. 关闭界面,和第一种不同,就算ABC多次循环打开,也只要关闭一次这个界面就会被关闭了。

    二、打开方式
    从A打开B,A要不要关闭,即关闭B之后是回到A还是回到主界面。
    这里也涉及到AB都为全屏、AB都为弹窗、AB中一个是全屏一个是弹窗的情况。

    三、特效、3D模型的层级问题
    2D+3D的显示情况,多个UI可能会有穿插问题,这里也要一并考虑进去。

    四、关卡结束的显示UI
    需不需要在出关卡后显示进关卡之前的状态。

    五、公共导航
    是所有UI共用一个导航还是每个界面单独做。

    常见的就是以上几个吧,需求搞清楚之后再看怎么管理的问题了。

    我们项目的做法是管理栈,且大部分是全屏UI,这是前提。所有的UI一个栈,全屏的UI一个栈,全屏UI里只显示最上层的一个。因为我们项目中很少有弹窗UI在全屏UI下面的,这是和策划达成共识的,所以这部分个别情况的Overdraw就忍了。

    卸载是通过配置控制的,如果一个系统有多个界面,会在这个系统的入口界面即系统主界面关闭的时候,卸载这个系统的所有UI,因为一般一个系统会有一些共有图集,所以逻辑上也比较合理。当然也看具体是什么系统,重不重要。像一些活动登录运营活动的界面,就即关即卸了。

    补充一下使用SetActive方式来隐藏/显示被遮挡UI的几个注意事项:

    1. 不要在OnEnable/OnDisable里写重要逻辑;
    2. Update里写的逻辑注意一下;
    3. 遇到过NGUI的Button状态异常的情况;

    感谢小鹿乱撞@UWA问答社区提供了回答

    A2:我们是把全屏页面(以下称全屏)和窗口页面(以下称窗口)做了区分。有个大前提,全屏和窗口都独占UI。打开后,无法点击下面。同一时刻只会有一个全屏显示;同一时刻窗口也不会叠加很多。当打开全屏的时候,会关闭上一个全屏页面;当打开窗口的时候,窗口会依赖在当前的全屏上。窗口是全屏的SubItem,无论从哪里打开的窗口,都会创建到全屏的节点下(全屏节点结构统一)。当关闭当前全屏时,释放掉依赖他的所有窗口。当关闭窗口时,只释放自己,同时解除掉全屏上的引用。

    程序中有一个栈,用来记录全屏的打开顺序,每打开一个全屏,往栈里压一个type,正常回退的时候按栈里的顺序回退,也可以都回退到目标全屏,就是从栈里往外弹,弹到目标类型为止。打开全屏的时候可以默认打开,或者在UIData中设置目标全屏的数据,在目标全屏打开后,根据UIData中的数据初始化全屏,比如切换标签,打开窗口等。
    感谢王忠华@UWA问答社区提供了回答

    A3:不要在UI显示上做太多的优化,太多的优化和封装反而是把简单的问题复杂化了,花费时间,逻辑混乱,学习成本提高。用最原始的解决方式,划分几个Layer,需要显示就直接SetActive。只有一个简单,无太多关联,易于理解,层次固定的UI显示系统,才能适应更多变化多样的需求。
    感谢hy@UWA问答社区提供了回答

    该问答来自UWA问答社区,欢迎大家转至社区交流:
    https://answer.uwa4d.com/question/5c40292c08d1a36aad5af9ca


    Lua

    Q:我用UWA GOT Online这个工具检测了Lua内存,其中像这种Destroyed总数大于0的,从这个数据又看不出是什么东西要怎么处理呢?

    请输入图片描述

    UWA:Destroyed表示已经被Unity“销毁”,但是依然在Cache中被引用的对象数,如果总数稳定,其实问题是不大的。但如果一直有增加,那么确实需要尝试定位一下。

    在SLua中有一个内置的Memory Profiler可以认为是这部分数据的加强版:会记录每个对象在被Destroyed之前,相关的组件或者GameObject的名字,比较方便排查。如果是ToLua,XLua等可能就得参考SLua的实现自己也做一个了,但因为机制其实差不多,所以比较容易照搬。

    可以直接在SLua代码里搜这两个函数,看下思路:
    ObjectCache.GetAlreadyDestroyedObjectNames();
    ObjectCache.GetAllManagedObjectNames();

    该回答由UWA提供,欢迎大家转至社区交流:
    https://answer.uwa4d.com/question/5c38262f9efb1b001255de96


    资源管理

    Q:最近在项目中将场景打包成AssetBundle(以下简称AB)的时候发现包量会变的很大。分析之后发现是资源重复的问题。具体情况是这样的:

    场景A,B,C 分别引用了Prefab M(M中包含其他资源,比如贴图T1,T2),这个时候按照我们的打包策略分析,最终会打出A.u,B.u,C.u,M.u4个AB包,按道理是没有问题的。但是我们查看了这四个包之后发现,共同依赖M里面的资源,比如贴图T1,T2在这四个AB包里面居然都会各存一份,而不是被剥离出来只保留引用,导致包量变大很多。最后自己试验的结果是,对场景打包,只有当我把M里面的资源也都单独拎出来打包,就是打出A.u,B.u,C.u,M.u,T1.u,T2.u,才会避免资源重复。

    但是显然这样打包AB粒度太细了,我们项目的资源非常多,这样打包AB的数量会陡增,也不是很好的办法。目前只有在打场景AB才出现这种问题,其他类型的AB,打包都不会重复。我们用的是Unity 2017.4.1f1 (64-bit)版本。

    请问大家,你们项目场景打包有遇到过这样的问题吗,有什么好的解决方法吗?

    A:因为Prefab对Scene来说本来就是Clone,而不是Ref,打包时就完全没有Prefab这层关系了。比如Scene A、B、C都引用了PrefabD,打包时A、B、C内都会clone一份D(只有在Editor下编辑时才是ref + change的方式保存),换句话说Prefab D是完全可以不打包的,即使打了包,也和场景里的clone完全没关系。所以pfb没办法作为共享单元,而Prefab和scene引用的Texture是Ref,这个可以作为共享单元。

    一个解法是升级到Unity 2018,新的Prefab机制应该是让Prefab对Scene属于Ref,而不是clone—看过其它同学测过、说过,自己没实际测过。

    另外的解法就是抓大放小,这里Prefab(GameObject)一般不大,有冗余也就罢了,大头在Texture,所以Texture单独打AB总是要搞搞的。

    感谢gx@UWA问答社区提供了回答,欢迎大家转至社区交流:
    https://answer.uwa4d.com/question/5c35666c9efb1b001255de54


    UI

    Q:怎么隐藏iPhone X底部横条?

    A:2017的版本有这两个选项

    请输入图片描述

    如果没有上面的选项,可以通过修改导出Xcode工程中的这里(如果没有这段代码,加上去就行了)

    请输入图片描述

    感谢范世青@UWA问答社区提供了回答,欢迎大家转至社区交流:
    https://answer.uwa4d.com/question/5c3c426e284abc7812161a21


    FBX

    Q:因为项目需要,想在Native代码中设置SkinnedMeshRenderer的骨骼Transform(Unity版本不限)。目前能找到的方法是,在选择不进行OptimizeGameObject的情况下,直接修改每个骨骼的Transform。有没有在OptimizeGameObject的情况下,仍然能设置骨骼结点的办法?

    UWA:通用的方法很可能是没有的,就好比Dynamic Bone和Optimize GameObject不能共用一样。如果是想设置少量骨骼节点,那么可以尝试先将其Export出来,但如果是大量或随机的骨骼节点,那么很可能就没有办法达到了。

    该回答由UWA提供,欢迎大家转至社区交流:
    https://answer.uwa4d.com/question/5c355b429efb1b001255de4c


    今天的分享就到这里。当然,生有涯而知无涯。在漫漫的开发周期中,您看到的这些问题也许都只是冰山一角,我们早已在UWA问答网站上准备了更多的技术话题等你一起来探索和分享。欢迎热爱进步的你加入,也许你的方法恰能解别人的燃眉之急;而他山之“石”,也能攻你之“玉”。

    官网:www.uwa4d.com
    官方技术博客:blog.uwa4d.com
    官方问答社区:answer.uwa4d.com
    官方技术QQ群:793972859(原群已满员)

    封面图来源:Crest Ocean Render
    https://lab.uwa4d.com/lab/5b55ee58d7f10a201fd760a9

     

     

    展开全文
  • 为了缓解频谱资源稀缺的问题并满足不断增长... 数值实验结果表明,仅在稀疏情况下,SDL机制才在LAA和Wi-Fi之间具有相对友好和和谐的共存关系;而在SLA机制下,Cell ON / OFF机制在LAA和Wi-Fi共存情况下要比SDL更有效。
  • ap与sta共存

    千次阅读 2016-11-04 13:44:56
    1:wifi的concurrent mode 所谓wifi的共存模式,有以下几种: station mode + station modestation mode + ap modestation mode + p2p ... version后,就开始支持station + p2p的共存,但其他的共存模式目前在

    1:wifi的concurrent mode

    所谓wifi的共存模式,有以下几种:

      • station mode + station mode
      • station mode + ap mode
      • station mode + p2p mode
      • p2p mode + ap mode

    目前Android自从JB version后,就开始支持station + p2p的共存,但其他的共存模式目前在android上都还未支持。现在市面上的wifi驱动主要是支持前三种共存,目前第四种共存模式,暂未见到;而station+ap mode,目前我们有在BXXX项目中使用,使用场景就是:

    做Ap供其他的mid或phone来连接,同时自己又做station mode来连接外面可以上网的路由器,这样在mid或phone上,就可以在访问BXXX的同时,还可以上网。BXXX自己当然也可以上网了。

     

    但需要主要的是,以上各模式中的station,ap,p2p在驱动中都需要对应的网络接口的,所以如果要支持concurrent mode,你的驱动insmod后,必须吐出两个网络接口才行,如果只有一个网络接口,那肯定是不支持concurrent mode的,见下图,加载驱动后就会出现wlan0,p2p0两个网络接口。

    另外需要注意,这两个网络接口,都是在驱动中虚拟出来的,共享同一个物理硬件,因此他们也共享物理硬件所能达到的throughput,由于他们共同一个物理硬件,所以wlan0和p2p0必须在同一个channel上,因此跟wlan0和p2p0连接的网络都在同一个channel上,这样这个大网络里所有的设备共同参与这个信道的载波侦听/冲突检测,即同一时间只能有一个站在空气中发送无线包。如果刚开始出现ap/p2p跟wlan0的channel不一致的情况,那一般都是ap/p2p断开之前的链接,重新调频到wlan0的信道建立新的链接。

     

    wlan0,p2p0都是在linux下的wifi驱动中创建的,譬如进来一个数据包是根据什么标准来判断,该路由到wlan0还是该路由到p2p0,

    这是一个很趣的问题;另外wlan0接口和p2p0接口他们的发送数据包是如何调度和管理的,也是一个值得关注的问题。

    2:station mode + ap mode

    本节介绍station+ap的concurrent mode是如何建立的。先上一张整体的框架图:

    在调试阶段,为了验证ap+sta是否正常工作,我们最好是step by step的先验证sta mode是ok的,然后验证ap

    mode是ok的,最后才是sta+ap mode是否ok。

    2.1:station的启动方式

      • inmod wifi drivers modules  //加载wifi驱动模块,在这里可以指定各个网络接口的名字,正常会出wlan0和p2p0两个网络接口。
      • ifconfig wlan0 up //打开station mode对应的wlan0网络接口
      • 如下设置wpa_supplicant.conf,这样让station mode一起来就自动去链接指定的ap
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # cat /data/misc/wifi/wpa_supplicant.conf  
    2. ctrl_interface=wlan0  
    3. update_config=1  
    4.   
    5. network={  
    6.         ssid="ASUS_BEN_NEW"  
    7.         psk="33333333"  
    8.         priority=1  
    9. }  
      • /system/bin/wpa_supplicant -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf //启动wpa_supplicant后台服务
      • 执行wpa_cli,就可以查看这个时候station 是否已经跟路由器连接上了,在确认已经跟路由器连接上后,这个时候只是关联,鉴权完成,data port打开,但还未分配ip地址。
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # wpa_cli   
    2. wpa_cli v2.0-devel-4.2.1  
    3. Copyright (c) 2004-2012, Jouni Malinen <j@w1.fi> and contributors  
    4.   
    5. This software may be distributed under the terms of the BSD license.  
    6. See README for more details.  
    7.   
    8.   
    9. Using interface 'wlan0'  
    10.   
    11. Interactive mode  
    12.   
    13. <3>CTRL-EVENT-SCAN-RESULTS   
    14. sta sta_autoconnect status  
    15. > status   
    16. bssid=50:46:5d:00:68:e8  
    17. ssid=ASUS_BEN_NEW  
    18. id=0  
    19. mode=station  
    20. pairwise_cipher=CCMP  
    21. group_cipher=CCMP  
    22. key_mgmt=WPA2-PSK  
    23. wpa_state=COMPLETED  
    24. ip_address=192.168.1.136  
    25. p2p_device_address=00:92:cc:0c:e0:89  
    26. address=00:92:cc:0c:e0:89  
    27. <3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=50:46:5d:00:68:e8 SSID=ASUS_BEN_NEW  
    28. <3>CTRL-EVENT-CONNECTED - connection to 50:46:5d:00:68:e8 completed (reauth) [id=0 id_str=]  
    29. > p2p0: STA a0:f4:59:45:fc:d5 WPA: group key handshake completed (RSN)  
      • 设置/system/etc/dhcpcd/dhcpcd.conf文件
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # cat /system/etc/dhcpcd/dhcpcd.conf  
    2. # dhcpcd configuration for Android Wi-Fi interface  
    3. # See dhcpcd.conf(5) for details.  
    4.   
    5. # Disable solicitation of IPv6 Router Advertisements  
    6. noipv6rs  
    7.   
    8. interface wlan0  
    9. # dhcpcd-run-hooks uses these options.  
    10. option subnet_mask, routers, domain_name_servers  
      • system/bin/dhcpcd -aABKL      -f/system/etc/dhcpcd/dhcpcd.conf -handroid-e4cf57339578c6dc wlan0//开始申请ip地址
      • ifconfig -a  //通过这个命令,可以看到这个时候wlan0已经被分配了ip地址。这个时候如果可以ping通路由器的ip地址,说明station mode的启动已经ok。

    2.2: ap的启动方式

      • 设定/data/misc/wifi/hostapd.conf内容,由于上面已经加载了wifi驱动,所以这里不需要再加载
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # cat /proc/1261/cmdline   
    2. hostapd/data/misc/wifi/hostapd.conf/ #   
    3. / #   
    4. / # cat /data/misc/wifi/hostapd.conf  
    5. interface=p2p0  
    6. ssid=CAST-0CE089  
    7. channel=1  
    8. auth_algs=1  
    9. wpa=2  
    10. wpa_passphrase=198d02d6  
    11. wpa_key_mgmt=WPA-PSK  
    12. rsn_pairwise=TKIP CCMP  
    13.   
    14. ctrl_interface=/data/misc/wifi/hostapd  
    15. beacon_int=100  
    16. hw_mode=g  
    17. ieee80211n=1  
    18. wme_enabled=1  
    19. max_num_sta=8  

    上面的配置文件中:interface关键字指定ap mode使用的网络接口名字;ssid字段指定了ap的ssid名字;wpa*相关字段设定了ap的加密鉴权方式及密码;ctrl_interface设定控制接口,一般用于hostap_cli来跟他连接。

      • ifconfig p2p0 up  //打开p2p0网络接口
      • ifconfig p2p0 192.168.5.1 //配置p2p0网络接口的ip地址
      • hostapd /data/misc/wifi/hostapd.conf & // 启动hostapd后台,至此ap应该可以被其他wifi设备搜索到,说明启动成功,这个时候应该可以关联,鉴权成功,但由于ap端还未启动dhcp service,所以最终未能分配到ip地址而连接失败
      • /system/bin/dnsmasq --no-daemon --no-resolv      --no-poll --address=/b.tv/192.168.5.1      --dhcp-range=192.168.5.2,192.168.5.254,24h //dnsmasq有两个作用:一个是可以起到dhcp service的作用,另一个可以实现dns的forward;上面的--address指定了域名和ip地址的对应关系,--dhcp-range指定了dhcp的地址分配范围
      • 设定dnsmasq的dns转发,通常设定为8.8.8.8或8.8.4.4//不设定的话,mid或phone后面虽然可以通过ip地址ping通百度,但却不能够通过浏览器来浏览网页,原因就是dnsmasq的dns没有设置好
      • 这个时候,其他wifi设备如果能够扫描到它,并且还能连上它,分配的ip地址也是在192.168.5.2到192.168.5.254之间,并且能够ping通路由器的ip(在这里是192.168.5.1),说明ap mode的启动是成功。

    2.3:station 与 ap之间的路由

    至此,station mode和ap mode都已经启动成功,并且wlan0和p2p0都有ip地址,但这个时候,你在BXXX或mid上却不能ping通百度的ip地址(ping 180.76.3.151),但是在BXXX上可以ping 通route,在mid上可以ping通BXXX(见上面的框架图),为什么呢,因为你没有设置默认路由的关系。

      • route add 192.168.1.1 wlan0 //在BastCast上,为wlan0接口添加路由
      • route add 192.168.5.1 p2p0//在BastCast上,为p2p0接口添加路由
      • route add default gw 192.168.1.1 在BastCast上,添加默认路由
      • iptables -t nat -A natctrl_nat_POSTROUTING -o wlan0      -j MASQUERADE //设定nat,这样内网才能给外网通讯
      • echo 1 > /proc/sys/net/ipv4/ip_forward //是能内核的ip转发功能,默认是禁止的。
      • ping 180.76.3.151 //这个时候在BXXX上应该就可以ping通百度的ip地址了
      • 如果正确设置了dnsmasque的dns转发功能,应该可以通过浏览器上网了

    2.4:

    3:参考资料

    关于iptable:http://kuangkuang.blog.51cto.com/838/247230

    关于dnsmasq:https://wiki.archlinux.org/index.php/Dnsmasq

    关于dnsmasq:http://blog.chinaunix.net/uid-192452-id-3991843.html

    关于realteck wifi的参考文件:

    Realtek_WiFi_concurrent_mode_Introduction.pdf

    Quick_Start_Guide_for_Station_Mode.pdf

    Quick_Start_Guide_for_SoftAP.pdf

    wpa_cli_with_wpa_supplicant.pdf

    1:wifi的concurrent mode

    所谓wifi的共存模式,有以下几种:

      • station mode + station mode
      • station mode + ap mode
      • station mode + p2p mode
      • p2p mode + ap mode

    目前Android自从JB version后,就开始支持station + p2p的共存,但其他的共存模式目前在android上都还未支持。现在市面上的wifi驱动主要是支持前三种共存,目前第四种共存模式,暂未见到;而station+ap mode,目前我们有在BXXX项目中使用,使用场景就是:

    做Ap供其他的mid或phone来连接,同时自己又做station mode来连接外面可以上网的路由器,这样在mid或phone上,就可以在访问BXXX的同时,还可以上网。BXXX自己当然也可以上网了。

     

    但需要主要的是,以上各模式中的station,ap,p2p在驱动中都需要对应的网络接口的,所以如果要支持concurrent mode,你的驱动insmod后,必须吐出两个网络接口才行,如果只有一个网络接口,那肯定是不支持concurrent mode的,见下图,加载驱动后就会出现wlan0,p2p0两个网络接口。

    另外需要注意,这两个网络接口,都是在驱动中虚拟出来的,共享同一个物理硬件,因此他们也共享物理硬件所能达到的throughput,由于他们共同一个物理硬件,所以wlan0和p2p0必须在同一个channel上,因此跟wlan0和p2p0连接的网络都在同一个channel上,这样这个大网络里所有的设备共同参与这个信道的载波侦听/冲突检测,即同一时间只能有一个站在空气中发送无线包。如果刚开始出现ap/p2p跟wlan0的channel不一致的情况,那一般都是ap/p2p断开之前的链接,重新调频到wlan0的信道建立新的链接。

     

    wlan0,p2p0都是在linux下的wifi驱动中创建的,譬如进来一个数据包是根据什么标准来判断,该路由到wlan0还是该路由到p2p0,

    这是一个很趣的问题;另外wlan0接口和p2p0接口他们的发送数据包是如何调度和管理的,也是一个值得关注的问题。

    2:station mode + ap mode

    本节介绍station+ap的concurrent mode是如何建立的。先上一张整体的框架图:

    在调试阶段,为了验证ap+sta是否正常工作,我们最好是step by step的先验证sta mode是ok的,然后验证ap

    mode是ok的,最后才是sta+ap mode是否ok。

    2.1:station的启动方式

      • inmod wifi drivers modules  //加载wifi驱动模块,在这里可以指定各个网络接口的名字,正常会出wlan0和p2p0两个网络接口。
      • ifconfig wlan0 up //打开station mode对应的wlan0网络接口
      • 如下设置wpa_supplicant.conf,这样让station mode一起来就自动去链接指定的ap
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # cat /data/misc/wifi/wpa_supplicant.conf  
    2. ctrl_interface=wlan0  
    3. update_config=1  
    4.   
    5. network={  
    6.         ssid="ASUS_BEN_NEW"  
    7.         psk="33333333"  
    8.         priority=1  
    9. }  
      • /system/bin/wpa_supplicant -iwlan0 -Dnl80211 -c/data/misc/wifi/wpa_supplicant.conf //启动wpa_supplicant后台服务
      • 执行wpa_cli,就可以查看这个时候station 是否已经跟路由器连接上了,在确认已经跟路由器连接上后,这个时候只是关联,鉴权完成,data port打开,但还未分配ip地址。
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # wpa_cli   
    2. wpa_cli v2.0-devel-4.2.1  
    3. Copyright (c) 2004-2012, Jouni Malinen <j@w1.fi> and contributors  
    4.   
    5. This software may be distributed under the terms of the BSD license.  
    6. See README for more details.  
    7.   
    8.   
    9. Using interface 'wlan0'  
    10.   
    11. Interactive mode  
    12.   
    13. <3>CTRL-EVENT-SCAN-RESULTS   
    14. sta sta_autoconnect status  
    15. > status   
    16. bssid=50:46:5d:00:68:e8  
    17. ssid=ASUS_BEN_NEW  
    18. id=0  
    19. mode=station  
    20. pairwise_cipher=CCMP  
    21. group_cipher=CCMP  
    22. key_mgmt=WPA2-PSK  
    23. wpa_state=COMPLETED  
    24. ip_address=192.168.1.136  
    25. p2p_device_address=00:92:cc:0c:e0:89  
    26. address=00:92:cc:0c:e0:89  
    27. <3>CTRL-EVENT-STATE-CHANGE id=0 state=9 BSSID=50:46:5d:00:68:e8 SSID=ASUS_BEN_NEW  
    28. <3>CTRL-EVENT-CONNECTED - connection to 50:46:5d:00:68:e8 completed (reauth) [id=0 id_str=]  
    29. > p2p0: STA a0:f4:59:45:fc:d5 WPA: group key handshake completed (RSN)  
      • 设置/system/etc/dhcpcd/dhcpcd.conf文件
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # cat /system/etc/dhcpcd/dhcpcd.conf  
    2. # dhcpcd configuration for Android Wi-Fi interface  
    3. # See dhcpcd.conf(5) for details.  
    4.   
    5. # Disable solicitation of IPv6 Router Advertisements  
    6. noipv6rs  
    7.   
    8. interface wlan0  
    9. # dhcpcd-run-hooks uses these options.  
    10. option subnet_mask, routers, domain_name_servers  
      • system/bin/dhcpcd -aABKL      -f/system/etc/dhcpcd/dhcpcd.conf -handroid-e4cf57339578c6dc wlan0//开始申请ip地址
      • ifconfig -a  //通过这个命令,可以看到这个时候wlan0已经被分配了ip地址。这个时候如果可以ping通路由器的ip地址,说明station mode的启动已经ok。

    2.2: ap的启动方式

      • 设定/data/misc/wifi/hostapd.conf内容,由于上面已经加载了wifi驱动,所以这里不需要再加载
    [cpp] view plain copy
     在CODE上查看代码片派生到我的代码片
    1. / # cat /proc/1261/cmdline   
    2. hostapd/data/misc/wifi/hostapd.conf/ #   
    3. / #   
    4. / # cat /data/misc/wifi/hostapd.conf  
    5. interface=p2p0  
    6. ssid=CAST-0CE089  
    7. channel=1  
    8. auth_algs=1  
    9. wpa=2  
    10. wpa_passphrase=198d02d6  
    11. wpa_key_mgmt=WPA-PSK  
    12. rsn_pairwise=TKIP CCMP  
    13.   
    14. ctrl_interface=/data/misc/wifi/hostapd  
    15. beacon_int=100  
    16. hw_mode=g  
    17. ieee80211n=1  
    18. wme_enabled=1  
    19. max_num_sta=8  

    上面的配置文件中:interface关键字指定ap mode使用的网络接口名字;ssid字段指定了ap的ssid名字;wpa*相关字段设定了ap的加密鉴权方式及密码;ctrl_interface设定控制接口,一般用于hostap_cli来跟他连接。

      • ifconfig p2p0 up  //打开p2p0网络接口
      • ifconfig p2p0 192.168.5.1 //配置p2p0网络接口的ip地址
      • hostapd /data/misc/wifi/hostapd.conf & // 启动hostapd后台,至此ap应该可以被其他wifi设备搜索到,说明启动成功,这个时候应该可以关联,鉴权成功,但由于ap端还未启动dhcp service,所以最终未能分配到ip地址而连接失败
      • /system/bin/dnsmasq --no-daemon --no-resolv      --no-poll --address=/b.tv/192.168.5.1      --dhcp-range=192.168.5.2,192.168.5.254,24h //dnsmasq有两个作用:一个是可以起到dhcp service的作用,另一个可以实现dns的forward;上面的--address指定了域名和ip地址的对应关系,--dhcp-range指定了dhcp的地址分配范围
      • 设定dnsmasq的dns转发,通常设定为8.8.8.8或8.8.4.4//不设定的话,mid或phone后面虽然可以通过ip地址ping通百度,但却不能够通过浏览器来浏览网页,原因就是dnsmasq的dns没有设置好
      • 这个时候,其他wifi设备如果能够扫描到它,并且还能连上它,分配的ip地址也是在192.168.5.2到192.168.5.254之间,并且能够ping通路由器的ip(在这里是192.168.5.1),说明ap mode的启动是成功。

    2.3:station 与 ap之间的路由

    至此,station mode和ap mode都已经启动成功,并且wlan0和p2p0都有ip地址,但这个时候,你在BXXX或mid上却不能ping通百度的ip地址(ping 180.76.3.151),但是在BXXX上可以ping 通route,在mid上可以ping通BXXX(见上面的框架图),为什么呢,因为你没有设置默认路由的关系。

      • route add 192.168.1.1 wlan0 //在BastCast上,为wlan0接口添加路由
      • route add 192.168.5.1 p2p0//在BastCast上,为p2p0接口添加路由
      • route add default gw 192.168.1.1 在BastCast上,添加默认路由
      • iptables -t nat -A natctrl_nat_POSTROUTING -o wlan0      -j MASQUERADE //设定nat,这样内网才能给外网通讯
      • echo 1 > /proc/sys/net/ipv4/ip_forward //是能内核的ip转发功能,默认是禁止的。
      • ping 180.76.3.151 //这个时候在BXXX上应该就可以ping通百度的ip地址了
      • 如果正确设置了dnsmasque的dns转发功能,应该可以通过浏览器上网了

    2.4:

    3:参考资料

    关于iptable:http://kuangkuang.blog.51cto.com/838/247230

    关于dnsmasq:https://wiki.archlinux.org/index.php/Dnsmasq

    关于dnsmasq:http://blog.chinaunix.net/uid-192452-id-3991843.html

    关于realteck wifi的参考文件:

    Realtek_WiFi_concurrent_mode_Introduction.pdf

    Quick_Start_Guide_for_Station_Mode.pdf

    Quick_Start_Guide_for_SoftAP.pdf

    wpa_cli_with_wpa_supplicant.pdf

    展开全文
  • 2.4G上的无线共存问题

    千次阅读 2018-05-12 00:00:00
    在这繁忙而又神奇的2.4Ghz频段, WiFi,BT,Zigbee,Thread的无线信道共存有哪些问题呢?......
  • Keil4与keil5共存问题

    千次阅读 2019-10-15 21:32:01
    Keil4与keil5共存问题 因为一些原因,电脑要同时安装keil4和keil5,但因为优先级原因,51的工程也是用keil5打开,造成了很多麻烦,所以就找了个时间完成了keil4与keil5的共存问题,以下是步骤,希望可以帮助到你。 ...
  • 调研了我国主要矿区229对矿井的瓦斯与煤自燃灾害...建立了典型煤岩体裂隙场中气体运移数学模型,并结合实例定量分析了N2,O2,CH4的体积分数与运移速度关系;剖析了瓦斯与煤自燃共存灾害的案例,验证了多场交汇致灾机理。
  • 共存&博弈

    2004-07-09 23:20:00
    潜规则VS显规则:共存与博奕中推动社会发展 显规则是地上河,潜规则是地下河,看不见,但更汹涌; 只有显规则,则“水至清而无鱼”,只有潜规则,则会走向无序和混沌。 阴阳共存于太极;事物的发展,总是在两种规则...
  • 3G系统间的共存干扰研究关系个运营系统间是否能正常运作
  • 50 WebGL透明与不透明物体共存

    千次阅读 2017-06-20 02:17:02
    案例查看地址:点击这里上一章里面说过,如果我们是绘制的立方体图形,在里面加入了相关的代码,不会起作用。而且还是普通的立方体效果。...如果关闭隐藏面消除功能,那些不透明物体的前后关系就乱套...
  • 引入Mybatis与Hibernate共存

    千次阅读 2018-10-22 16:44:17
    引入Mybatis 与 Hibernate共存,再逐个替换,逐个测试,避免一次性替换引发大的问题 1、引入pom依赖 &lt;dependency&gt; &lt;groupId&gt;org.mybatis&lt;/groupId&gt; &lt;...
  • Nginx与httpd共存

    2018-12-29 14:50:00
    启动httpd时报错:  因为已经启动了Nginx,两者都默认使用了80端口,报错也正常。修改了"/etc/httpd/conf/httpd.conf"中的Listen值后,再次启动,报的错还是这样,什么情况?配置的新端口明明没有被占用了。...
  • 指出,强化对煤系烃源岩型(或煤系有机岩即煤岩型及煤系泥岩型)铀的富集机理和赋存规律的专项研究是建立“多能源同盆共存”理论的重要基础,进一步深入展开对煤中微量元素、常量元素与铀的赋存状态及其相互关系研究,...
  • linux下多版本opencv共存问题

    千次阅读 2017-07-28 16:21:54
    opencv的多版本共存问题。
  • bt和wifi的共存

    千次阅读 2016-11-22 17:30:39
    蓝牙和WIFI共存设计  蓝牙和802.11b/g/n都可能工作在2.4GISM,可能互相干扰。干扰的典型应用之一是VOIP,用手机的WLAN打VOIP电话,用蓝牙耳机来通话。互相干扰的后果是用户能感觉到通话质量的下降。 设计上有些...
  • 在linux下,可以利用alias命令解决python3和python2的共存问题,其实在windows下同样可以利用这个思路解决python2和python3的共存问题,只不过步骤稍显繁琐。  首先建立一个bat文件,建立别名的对应关系。 @...
  • python2.7和python3共存

    2016-10-24 15:54:00
    python2.7和python3共存 原本装了python,玩nodejs的时候需要node-gyp来编译依赖,无赖这货需要python2.5<v<3.0,那就弄两个版本吧 转载自 http://blog.kgzx.net/index.php/archives/40/ 因为类库兼容性的关系...
  • nginx配置http和https共存 以ssl on; 方式配置的http会返回400 server { listen 80; listen 443 ssl; server_name test.aaa.com; ssl_certificate /etc/nginx/ssl/test.aaa.com.crt; ssl_certificate_key/etc/...
  • tensorflow各个版本的CUDA以及Cudnn版本对应关系 windows下同一个显卡配置多个CUDA工具包以及它们之间的切换 CUDA、CUDNN在windows下的安装及配置 二、相关介绍 CUDA与显卡驱动没有对应关系,更新显卡驱动到最新...
  • eclipse支持多个jdk版本共存

    千次阅读 2016-07-05 14:47:05
    eclipse支持多个jdk版本共存 首先eclipse本身使用啥jdk没有任何关系 在Preference里设置整个workspace的jdk:Preferences->Java->Installed JREs,把1.4和1.5的都加上 然后可以为每个工程都指定一个jdk版本:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 32,530
精华内容 13,012
关键字:

共存关系