android进阶3step2:Android App通信 ——端口号IP等网络基础知识扫盲
网络操作基础知识
一、IP 地址和端口号
- 1) IP 地址用于在网络中唯一标识一台机器(通信实体),是一个 32 位整数,通常 用 4 个 0-255 的十进制数标识;
- 2) 端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能有两个程序占用同一个端口的情况;
端口号是一个 16 位整数,共有 3 类;
公认端口:0-1023,它们紧密绑定一些特定的服务(比如 TCP/IP 通信协 议程序的端口);
注册端口:1024-49151,它们松散绑定一些特定服务,其余可以随意使 用,应用程序用的最多端口号来自于这个范围;
动态/私有端口:49152-65535,这些端口一般是应用程序运行时临时地、 动态地占用,可以说是一种竞争资源吧,应用程序本身不会和这些端口绑 定,一般会将其作为资源利用;
- 3)真正参与网络通信的对象是计算机上的程序(网络通信程序),IP 地址是它的街 道门牌,而端口是它的房间号;
二、阻塞(blocking)与非阻塞(non-blocking)IO
IO 的阻塞、非阻塞主要表现在一个 IO 操作过程中,如果有些操作很慢,比如读操 作时需要准备数据,那么当前 IO 进程是否等待操作完成,还是得知暂时不能操作后先 去做别的事情?
一直等待下去,什么事也不做直到完成,这就是阻塞。
抽空做些别的事情,这是非阻塞。
非阻塞 IO 会在发出 IO 请求后立即得到回应,即使数据包没有准备好,也会返回 一个错误标识,使得操作进程不会阻塞在那里。操作进程会通过多次请求的方式直到数
据准备好,返回成功的标识。
想象一下下面两种场景:
情景A 小明和小刚两个人都很耿直内向,一天小明来找小刚借书:“小刚啊,你那本XXX 借我看看”。 于是小刚就去找书,小明就等着,找了半天找到了,把书给了小明。
情景B 小明和小刚两个人都很活泼外向,一天小明来找小刚借书:“嘿小刚,你那本 XXX
借我看看”。 小刚说:“我得找一会”,小明就去打球去了。过会又来,这次书找到了, 把书给了小明。
结论:A 是阻塞的,B 是非阻塞的。
从 CPU 角度可以看出非阻塞明显提高了 CPU 的利用率,进程不会一直在那等待。 但是同样也带来了线程切换的增加。增加的 CPU 使用时间能不能补偿系统的切换成 本需要好好评估。
三、同步(synchronous)与异步(asynchronous)IO
判断同步和异步的标准在于:
一个 IO 操作直到完成,是否导致程序进程的阻塞。 如果阻塞就是同步的,没有阻塞就是异步的。
这里的 IO 操作指的是真实的 IO 操作, 也就是数据从内核拷贝到系统进程(读)的过程。
继续前面借书的例子,异步借书是这样的:
情景C 小明很懒,一天小明来找小刚借书:“嘿小刚,你那本 XXX 借我看看”。 小刚 说:“我得找一会”,小明就出去打球了并且让小刚如果找到了就把书拿给他。小刚是个负责任的人,找到了书送到了小明手上。
A 和 B 的借书方式都是同步的,有人要问了 B 不是非阻塞嘛,怎么还是同步?
前面说了 IO 操作的 2 个步骤:准备数据和把数据从内核中拷贝到程序进程。
映射到这个 例子,书即是准备的数据,小刚是内核,小明是程序进程,小刚把书给小明这是拷贝数据。
在 B 方式中,小刚找书这段时间小明的确是没闲着,该干嘛干嘛,但是小刚找到 书把书给小明的这个过程也就是拷贝数据这个步骤,小明还是得乖乖的回来候着小刚把 书递手上。所以这里就阻塞了,根据上面的定义,所以是同步。
在涉及到 IO 处理时通常都会遇到一个是同步还是异步的处理方式的选择问题。
同步能够保证程序的可靠性,而异步可以提升程序的性能。
小明自己去取书不管等着不 等着迟早拿到书,指望小刚找到了送来,万一小刚忘了或者有急事忙别的了,那书就没 了。
android进阶3step2:Android App通信 ——端口号IP等网络基础知识扫盲相关推荐
- Android 进阶8:进程通信之 Binder 机制浅析
读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...
- 【Android 进阶】开发APP常见的错误
科技日益发展,现在创建一款移动App的时间远远的低于以前,这并不稀奇:因为目前超过一半的网络流量都是来源于移动设备.当用户不在电脑旁时,可以通过专用应用程序无缝开始移动体验.令人惋惜的是,许多缺乏经验 ...
- 【Android 进阶】Android优秀框架
根据上图我们依次说明: 1,DiskLruCache 硬盘缓存最佳方案(Google提供的一套硬盘缓存的解决方案:DiskLruCache(非Google官方编写,但获得官方认证)) DiskLruC ...
- android支持ipv6 mate9,APP兼容IPV6以及搭配IPv6网络环境
1.不建议使用底层的网络API.蓝色部分的API是不存在兼容性问题的,平时使用的第三方的网络库也都是用的蓝色部分. 2.不要使用IP地址,使用域名. 以前Reachability库中SCNetwork ...
- APP——功耗测试(耗电测试)——基础知识
adb 查看电池状态信息 手机连接上电脑.输入adb命令:adb shell dumpsys battery Current Battery Service state: ####当前电池服务状态 ...
- 收藏:通信网络基础知识
什么是通信网络 我们周围无时无刻不存在一张网,如电话网.电报网.电视网.计算机网络等:即使我们身体内部也存在许许多多的网络系统,如神经系统.消化系统等.最为典型的代表即计算机网络,它是计算机技术与通信 ...
- (chap1 网络基础知识)通信类型
网络通信当中,根据接收端数量及其后续的行为对通信进行分类. 单播(Unicast) 字面上,"Uni"表示"1","Cast"意为" ...
- 通信网络基础知识01
文章目录 1. 简单了解 1.1 OLT(光线路终端): 1.2 ODN(分光器): 1.3 ONU(光网络单元) 2.OAN(光纤接入网) 2.1 分类 2.2 PON(Passive Optica ...
- L022-老男孩Linux高端运维课程-linux系统网络基础知识及配置实战精讲
01001100:第2,5,6位为1对应的数是64,8,4.那么它对应的十进制数是64+8+4=76 224=11100000(二进制数)方法:224-128=96,96-64=32,32-32=0. ...
最新文章
- 一文解决图片数据集太少的问题:详解KerasImageDataAugmentation各参数
- 微服务架构之「 容器技术 」
- 机器人教练SWOT分析_学车没人教,包头这个驾校机器人教练已上岗,再也不怕被教练骂了...
- 类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)
- 机器学习资料合计(二)
- java+boolean+属性,java – 从属性中获取int,float,boolean和string
- 计算机应用的时间地点意义,计算机应用在教学中的作用
- 可以在python3下面用的pyh
- C语言的源代码文件、目标文件和可执行文件
- java中加权滤波怎么用_方向加权中值滤波算法-The Directional Medial Filtering with Weights...
- visio中画细箭头
- 如何汉化eclipse
- 部队室内靶场有哪些硬件设备和强制性存在的系统
- 始终从最不易改变的方面开始
- Jenkins使用问题记录
- 招生难、管理难!教育如何实现零流失、高增长?教育行业如何玩转“私域流量”?...
- 基于参考辐射源/定标的校正算法
- DNA旋转特效 html+css
- L1 Cache、L2 Cache、L3 Cache说明
- matlab曲面拟合的算法,Matlab三维节点拟合出平滑曲面,并求拟合曲面与底部投影形成的体积以及投影面积...