Android 基础入门教程--笔记

引言:做为APP测试人员,了解Android APP 开发的一些基础认识是很好的。

http://www.runoob.com/w3cnote/android-tutorial-system-architecture-analysis.htmlhtml

1.解决兼容问题

那么多的系统版本,咱们开发的时候要针对哪一个版本进行开发? 这就是做为一个Android必须面对的Android的"碎片化"问题了,而这个问题又分为两个: ①系统碎片化:咱们开发App时可能须要作到低版本兼容,好比,最低兼容至2.3版本;因为各类Rom定制的盛行,国人都喜欢对原生系统作一些更改,这致使了在原生系统上可行,而在定制Rom上不可行的问题,好比相机调用~ ②屏幕碎片化:市面上各类各样屏幕尺寸的手机,4.3寸,4.5寸,4.7寸,5.0寸,5.3寸...等等,除了手机外,还有Android平板,因此开发时咱们可能要处理这个屏幕适配的问题android

2.APP开发涉及架构

Android平台架构图

架构的简单理解:

  1. Application(应用程序层) 咱们通常说的应用层的开发就是在这个层次上进行的,固然包括了系统内置的一组应用程序,使用的是Java语言
  2. Application Framework(应用程序框架层) 不管系统内置或者咱们本身编写的App,都须要使用到这层,好比咱们想弄来电黑名单,自动挂断电话,咱们就须要用到电话管理(TelephonyManager) 经过该层咱们就能够很轻松的实现挂断操做,而不须要关心底层实现
  3. Libraries(库) + Android Runtime(Android运行时) Android给咱们提供了一组C/C++库,为平台的不一样组件所使用,好比媒体框架;而Android Runtime则由Android核心库集 + Dalvik虚拟机构成,Dalvik虚拟机是针对移动设备的虚拟机,它的特色:不须要很快的CPU计算速度和大量的内存空间;而每一个App都单独地运行在单独的Dalvik虚拟机内每一个app对于一条Dalvik进程)而他的简单运行流程如: Dalvik的运行流程
  4. Linux内核 这里就是涉及底层驱动的东西了,一些系统服务,好比安全性,内存管理以及进程管理等

3.开发工具

Android Studio是比较吃配置的,若是电脑不怎么好,建议仍是先使用Eclipse进行Android开发web

adb经常使用命令:面试

 打包流程:算法

和Java不一样,咱们的App运行在虚拟机上,而咱们的控制台却并不会显示相关信息,只有安装状态而已,因此咱们会在Logcat上查看APP程序运行的日志信息shell

----------------------------------------------------------------------------------------数据库

什么是签名,有什么用:

Android APP都须要咱们用一个证书对应用进行数字签名,否则的话是没法安装到Android手机上的,平时咱们调试运行时到手机上时,是AS会自动用默认的密钥和证书来进行签名;可是咱们实际发布编译时,则不会自动签名,这个时候咱们就须要进行手动签名了! 为咱们的APK签名有如下好处:编程

  • 1.应用程序升级:若是你但愿用户无缝升级到新的版本,那么你必须用同一个证书进行签名。这是因为只有以同一个证书签名,系统才会容许安装升级的应用程序。若是你采用了不一样的证书,那么系统会要求你的应用程序采用不一样的包名称,在这种状况下至关于安装了一个全新的应用程序。若是想升级应用程序,签名证书要相同,包名称要相同!
  • 2.应用程序模块化: Android系统能够容许同一个证书签名的多个应用程序在一个进程里运行,系统实际把他们做为一个单个的应用程序,此时就能够把咱们的应用程序以模块的方式进行部署,而用户能够独立的升级其中的一个模块。
  • 3.代码或者数据共享: Android提供了基于签名的权限机制,那么一个应用程序就能够为另外一个以相同证书签名的应用程序公开本身的功能。以同一个证书对多个应用程序进行签名,利用基于签名的权限检查,你就能够在应用程序间以安全的方式共享代码和数据了。 不一样的应用程序之间,想共享数据,或者共享代码,那么要让他们运行在同一个进程中,并且要让他们用相同的证书签名。 ————上述内容摘自:android 为何须要签名

Android Studio如何打包签名:

好的,由于学习本课程的都是初学者,多渠道打包的内容之后再进行讲解!本节只讲最简单的打包签名 对了,1中说的调试时默认生成的apk在:app/build/outputs/apk目录下! 和Eclipse并不相同,Eclipse是在bin目录下生成的!缓存

好的,打开咱们的AS上的Hello World项目,点击菜单:安全

Build -> Generate Signed APK...

②弹出窗口,若是没有key,就建立一个,有的话就选择存在的Key

③没有,咱们新建一个,可根据本身须要填写相关项:

④好的,点击OK后,能够看到咱们密码的信息,可能须要咱们填入密码了,填写下:

⑤点击Next:

⑥点击Finish稍等一下子会出现下述提示,说明应用已经打包签名成功了:

⑦能够看到打包后的APK已经安详地躺在咱们的app目录下了:

⑧到第七步就已经打包签名完成了,若是你要验证是否签名,只须要输入下述cmd指令


打包Android APK的方法还有不少,命令行,或者Gradle,ANT,MAVEN等等,方法有不少,本节讲解最简单的经过图形化界面打包签名的方式!好了,本节就到这里,最简单的打包签名方法get了没?

----------------------------------------------

4.线程的相关概念

 

1)相关概念:

  • 程序:为了完成特定任务,用某种语言编写的一组指令集合(一组静态代码)
  • 进程运行中的程序,系统调度与资源分配的一个独立单位,操做系统会 为每一个进程分配一段内存空间!程序的依次动态执行,经历代码的加载,执行, 执行完毕的完整过程!
  • 线程:比进程更小的执行单元,每一个进程可能有多条线程,线程须要放在一个 进程中才能执行,线程由程序负责管理,而进程则由系统进行调度!
  • 多线程的理解并行执行多个条指令,将CPU时间片按照调度算法分配给各个 线程,其实是分时执行的,只是这个切换的时间很短,用户感受到"同时"而已!

       Service与Thread线程的区别

其实他们二者并无太大的关系,不过有不少朋友常常把这两个混淆了! Thread是线程,程序执行的最小单元,分配CPU的基本单位! 而Service则是Android提供一个容许长时间留驻后台的一个组件,最多见的 用法就是作轮询操做!或者想在后台作一些事情,好比后台下载更新! 记得别把这两个概念混淆!

   5.BroadcastReceiver

答:Broadcast直译广播,咱们举个形象的例子来帮我理解下BroadcastReceiver,记得之前读书 的时候,每一个班级都会有一个挂在墙上的大喇叭,用来广播一些通知,好比,开学要去搬书,广播: "每一个班级找几个同窗教务处拿书",发出这个广播后,全部同窗都会在同一时刻收到这条广播通知, 收到,但不是每一个同窗都会去搬书,通常去搬书的都是班里的"大力士",这群"大力士"接到这条 广播后就会动身去把书搬回但是!
——好吧,上面这个就是一个广播传递的一个很形象的例子:
大喇叭--> 发送广播 --> 全部学生都能收到广播 --> 大力士处理广播
回到咱们的概念,其实BroadcastReceiver就是应用程序间的全局大喇叭,即通讯的一个手段, 系统本身在不少时候都会发送广播,好比电量低或者充足,刚启动完,插入耳机,输入法改变等, 发生这些时间,系统都会发送广播,这个叫系统广播,每一个APP都会收到,若是你想让你的应用在接收到 这个广播的时候作一些操做,好比:系统开机后,偷偷后台跑服务~哈哈,这个时候你只须要为你的应用 注册一个用于监视开机的BroadcastReceiver,当接收到开机广播就作写偷偷摸摸的勾当~ 固然咱们也能够本身发广播,好比:接到服务端推送信息,用户在别处登陆,而后应该强制用户下线回到 登录界面,并提示在别处登陆~固然,这些等下都会写一个简单的示例帮你们了解广播给咱们带来的好处~

让咱们的APP接收系统广播, 接收以前,还须要为咱们的APP注册广播接收器哦!而注册的方法又分为如下两种:动态与静态!

BroadcastReceiver的简单使用就是那么简单,不过咱们这里用到的都是全局广播,也就是其余 应用也能收到咱们的广播,这样可能会引发一些安全性问题,不过没事,下一节咱们来教你们如何用 本地广播

-----------------------------------------------------------------

6.SQLite是什么?

SQLite数据库,和其余的SQL数据库不一样, 咱们并不须要在手机上另外安装一个数据库软件,Android系统已经集成了这个数据库,咱们无需像 使用其余数据库软件(Oracle,MSSQL,MySql等)又要安装,而后完成相关配置,又要改端口之类的! 

为何要用SQLite?SQLite有什么特色?

  ①SQLite是一个轻量级的关系型数据库,运算速度快,占用资源少,很适合在移动设备上使用, 不只支持标准SQL语法,还遵循ACID(数据库事务)原则,无需帐号,使用起来很是方便!

SQLite支持五种数据类型:NULL,INTEGER,REAL(浮点数),TEXT(字符串文本)和BLOB(二进制对象) 虽然只有五种,可是对于varchar,char等其余数据类型都是能够保存的;由于SQLite有个最大的特色: 你能够各类数据类型的数据保存到任何字段中而不用关心字段声明的数据类型是什么,

使用SQLite图形化工具查看db文件 笔者用的是SQLite Expert Professional

进入adb shell,接着键入下述指令

 --------------------------------------------------

SQLite事务

 

简单点说就是:写在事务里的全部数据库操做都成功,事务提交,不然,事务回滚,就是回到前面 的状态——未执行数据库操做的时候!另外,前面咱们也将了,在data/data/<包名>/database/目录 下除了有咱们建立的db文件外,还有一个xxx.db-journal这个文件就是用来让数据库支持事务而 产生的 临时的日志文件!

 ------------------------------------------------------

  • 什么是数据库版本升级?怎么升级法?

答:假如咱们开发了一款APP,里面用到了数据库,咱们假定这个数据库版本为v1.0, 在这个版本,咱们建立了一个x.db的数据库文件,咱们经过onCreate()方法建立了第一个table, t_user,里面有两个字段:_id,user_id;后面咱们想增长一个字段user_name,这个时候 咱们就须要对数据库表的结构进行修改了,而咱们能够把更新数据库的操做梵高onUpgrade() 方法中,咱们只须要在实例化自定义SQLiteOpenHelper的时候,修改版本号,好比把1改为2 这样,就会自动调用onUpgrade()的方法了!另外,对于每一个数据库版本咱们都应该作好 相应的记录(文档),相似于下面这种:

数据库版本 andoid对应版本 内容
v1.0 1 第一个版本,包含两个字段...
v1.1 2 数据保留,新增user_name字段
  • 一些疑问以及相关解决方案,测试时,要关注这些设计变动带来的影响

①应用升级,数据库文件是否会删除?

答:不会!数据什么的都在!

②若是我想删除表中某个字段或者增长一个新的字段,原先的数据还在吗?

答:在的!

好比是这种,假如咱们已经升级到第三个版本了,咱们在第二个版本增长了一个表, 而后第三个版本也增长了一个表,加入用户直接从第一个版本升级到第三个版本,这样 没通过第二个版本,就没有增长的那个表,这可怎么破?

答:很简单,咱们能够在onUpgrade()里写一个switch(),结构以下:

public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int arg2, int arg3) { switch(arg2){ case 1: db.execSQL(第一个版本的建表语句); case 2: db.execSQL(第二个版本的建表语句); case 3: db.execSQL(第三个版本的建表语句); } }
细心的你可能发现这里并无写break,这就对了,这是为了保证跨版本升级时,每次数据库 修改都能所有执行到!这样能够保证表结构都是最新的!另外不必定是建表语句,修改表结构 也能够哦!

 

旧表的设计太糟糕,不少字段要改,改动太多,想建一个新表,可是表名要同样 并且之前的一些数据要保存到新表中!

 

答:呵呵,给你跪了,固然,也有解决办法,下面说下思路:

1.将旧表更名成临时表: ALTER TABLE User RENAME TO _temp_User;

2.建立新表: CREATE TABLE User (u_id INTEGER PRIMARY KEY,u_name VARCHAR(20),u_age VARCHAR(4));

3.导入数据; INSERT INTO User SELECT u_id,u_name,"18" FROM _temp_User; //原表中没有的要本身设个默认值

4.删除临时表; DROP TABLE_temp_User;

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

7.APP网络编程之Http协议  

如今绝大部分的App都在使用http和https,须要客户端主动向服务器发送请求,来获取数据

  • Http 1.0 与 Http 1.1的区别

答:1.0协议,客户端与web服务器创建链接后,只能得到一个web资源! 而1.1协议,容许客户端与web服务器创建链接后,在一个链接上获取多个web资源!

  • 而天诚百微APP使用的基于TCP协议的Socket通讯,来维持与服务器的长连接,该APP相似及时通讯工具(IM)

少部分会有本身的tcp长链接通道,更少部分的app搭配udp通道或者相似QUIC这种reliable UDP协议来提高体验。无论是什么协议,只要涉及客户端和服务器的通讯,就必然要实现相似https安全握手的流程,部分或者所有,开发者老是在性能和安全性之间取舍。

若是自建长链接使用tcp,udp或者其余网络协议,也应该实现相似HTTPS的密钥协商流程。

  • 网络分类:

  1.以太网(Ethernet):局域网(local area network,LAN)使用的就是以太网
2.英特网(Internet):广域网(wide area network,WAN)使用的就是Internet

Internet使用的通讯协议是TCP/IP协议,其是一个四层模型

      

ARP协议:(Address Resolution Protocol)网络地址解析协议,咱们知道的是IP也是配置在网卡上的,上面又提到网卡有固定的网卡号(MAC地址),实际上IP地址是经过软件配置在指定网卡上的,经过向局域网发送ARP包可以返回具体IP配置所在的网卡的MAC地址。【注:获取网卡MAC地址:#ifconfig,获取本机IP/MAC地址对应数据:#arp -n】

ICMP协议:(Internet Control Message Protocol)因特网信息控制协议,其是一个错误检测与报告的机制,用于确保网络的链接状态,经常使用的ping与traceroute命令便是使用的此协议,其也须要放到IP包里进行传输。

 

Android与互联网交互的三种方式


Http协议的底层工做流程:

答:咱们先要知道两个名词:

  • SYN(synchronous):TCP/IP创建链接时使用的握手信号
  • ACK(Acknowledgement):确认字符,确认发来的数据已经接受无误

接着就到TCP/IP三次握手的概念:

  • 客户端发送syn包(syn = j)到服务器,进入SYN_SEND状态,而后等待服务器确认
  • 服务器收到syn包,确认客户的syn(ack = j + 1),同时在本身也发送一个SYN包(syn=k), 即SYN + ACK包,服务器进入SYN_RECV状态
  • 客户端收到SYN + ACK包,向服务器发送确认包ACK(ack = k +1),发送完毕后,客户端与服务端 进入ESTABLISHED状态,完成三次握手,而后二者开始传送数据

若是还不是很清晰,咱们再来看三次握手的示意图:

APP缓存 

如今不少门户类信息网站,好比虎嗅,ifanr,钛媒体等等的APP,简单点说是信息阅读类的APP,不少 都是直接嵌套一个WebView用来显示相关资讯的,这可能就涉及到了WebView的缓存了!

所谓的页面缓存 就是指:保存加载一个网页时所需的HTML,JS,CSS等页面相关的数据以及其余资源,当没网的时候或者 网络状态较差的时候,加载本地保存好的相关数据!而实现这个缓存的方式有两种,一种是后台写一个 下载的Service,将文章相关的数据按本身的需求下载到数据库或者保存到相应文件夹中,而后下次加载 对应URL前先判断是否存在本地缓存,若是存在优先加载本地缓存,不存在则执行联网请求,同时缓存 相关资源,典型的如旧版本的36Kr,在进去后会先离线文章,而后再显示!

固然,本节要讲解的不是 这种本身写逻辑的方式,而是经过WebView自己自带的缓存功能来缓存页面,这种方式使用起来很是 简单,咱们只需为WebView设置开启相关功能,以及设置数据库的缓存路径便可完成缓存!

-------------------------------------------------------------------------------------------------- 

Json是什么?

答:JavaScript Object Natation, 一种轻量级的数据交换格式, 与XML同样, 普遍被采用的客户端和服务端交互的解决方案!具备良好的可读和便于快速编写的特性。

--------------------------------------------------------------------------------------------------------------------------------------------------------

8.APP网络编程之Socket网络基础

故须要对数据传给服务器,在服务器端作处理。

网络协议有几层?那么IP协议在哪层?Socket是什么鬼? 分哪几种?TCP和UDP协议又在哪层?有什么区别...嗯,这...因此学习本节概念性的理论仍是颇有 必要的!

七层模型每层叫 什么,大概拿来干吗,还有TCP三次握手和四次挥手

OSI七层网络模型(从下往上)

  • 物理层(Physical):设备之间的数据通讯提供传输媒体及互连设备,为数据传输提供可靠的 环境。能够理解为网络传输的物理媒体部分,好比网卡,网线,集线器,中继器,调制解调器等! 在这一层,数据尚未被组织,仅做为原始的位流或电气电压处理,这一层的单位是:bit比特
  • 数据链路层(Datalink):能够理解为数据通道,主要功能是如何在不可靠的物理线路上进行 数据的可靠传递,改层做用包括:物理地址寻址,数据的成帧,流量控制,数据检错以及重发等! 另外这个数据链路指的是:物理层要为终端设备间的数据通讯提供传输媒体及其链接。媒体是 长期的,链接是有生存期的。在链接生存期内,收发两端能够进行不等的一次或屡次数据通讯。 每次通讯都要通过创建通讯联络和拆除通讯联络两过程!这种创建起来的数据收发关系~ 该层的设备有:网卡,网桥,网路交换机,另外该层的单位为:
  • 网络层(Network):主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发 送方路由到接收方,所谓的路由与寻径:一台终端可能须要与多台终端通讯,这样就产生的了 把任意两台终端设备数据连接起来的问题!简单点说就是:创建网络链接和为上层提供服务! 该层的设备有:路由!该层的单位为:数据包,另外IP协议就在这一层!
  • 传输层(Transport):向上面的应用层提供通讯服务,面向通讯部分的最高层,同时也是 用户功能中的最低层。接收会话层数据,在必要时将数据进行分割,并将这些数据交给网络 层,而且保证这些数据段有效的到达对端!因此这层的单位是:数据段;而这层有两个很重要 的协议就是:TCP传输控制协议UDP用户数据报协议,这也是本章节核心讲解的部分!
  • 会话层(Session):负责在网络中的两节点之间创建、维持和终止通讯。创建通讯连接, 保持会话过程通讯连接的畅通,同步两个节点之间的对话,决定通讯是否被中断以及通讯中断时 决定从何处从新发送,即不一样机器上的用户之间会话的创建及管理!
  • 表示层(Presentation):对来自应用层的命令和数据进行解释,对各类语法赋予相应 的含义,并按照必定的格式传送给会话层。其主要功能是"处理用户信息的表示问题,如编码、 数据格式转换和加密解密,压缩解压缩"等
  • 应用层(Application):OSI参考模型的最高层,为用户的应用程序提供网络服务。 它在其余6层工做的基础上,负责完成网络中应用程序与网络操做系统之间的联系,创建与结束使用者之间的联系,并完成网络用户提出的各类网络服务及应用所需的监督、管理和服务等各类协议。此外,该层还负责协调各个应用程序间的工做。应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登陆服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。

好的上面咱们浅述了OSI七层网络模型,下面总结下:

OSI是一个理想的模型,通常的网络系统只涉及其中的几层,在七层模型中,每一层都提供一个特殊 的网络功能,从网络功能角度观察:

  • 下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能, 即以节点到节点之间的通讯为主
  • 第4层做为上下两部分的桥梁,是整个网络体系结构中最关键的部分;
  • 上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。

简言之,下4层主要完成通讯子网的功能,上3层主要完成资源子网的功能。


2.TCP/IP四层模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。这4层分别为:

  • 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、 网络远程访问协议(Telnet)等。
  • 传输层:在此层中,它提供了节点间的数据传送服务,如传输控制协议(TCP)、 用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中, 这一层负责传送数据,而且肯定数据已被送达并接收。
  • 网络互连层:负责提供基本的数据封包传送功能,让每一块数据包都可以到达目 的主机(但不检查是否被正确接收),如网际协议(IP)。
  • 主机到网络层:对实际的网络媒体的管理,定义如何使用实际网络 (如Ethernet、Serial Line等)来传送数据。

3.TCP/UDP区别讲解

接下来要讲的是 和咱们Socket开发相关的一些概念名词了!

1)IP地址

2)端口

1. 用于区分不一样的应用程序

2. 端口号的范围为0-65535,其中0-1023未系统的保留端口,咱们的程序尽量别使用这些端口!

3. IP地址和端口号组成了咱们的Socket,Socket是网络运行程序间双向通讯链路的终结点, 是TCP和UDP的基础!

4. 经常使用协议使用的端口:HTTP:80,FTP:21,TELNET:23

3)TCP协议与UDP协议的比较:

TCP协议流程详解:

首先TCP/IP是一个协议簇,里面包括不少协议的。UDP只是其中的一个。之因此命名为TCP/IP协议, 由于TCP,IP协议是两个很重要的协议,就用他两命名了。

下面咱们来说解TCP协议和UDP协议的区别:

TCP(Transmission Control Protocol,传输控制协议)是面向链接的协议,即在收发数据钱 ,都须要与对面创建可靠的连接,这也是面试常常会问到的TCP的三次握手以及TCP的四次挥手! 三次握手: 创建一个TCP链接时,须要客户端和服务端总共发送3个包以确认链接的创建, 在Socket编程中,这一过程由客户端执行connect来触发,具体流程图以下:

  • 第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server, Client进入SYN_SENT状态,等待Server确认。
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求创建链接,Server将标志位 SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认链接请求 ,Server进入SYN_RCVD状态。
  • 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,若是正确则将标志位ACK 置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,若是正确则 链接创建成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间能够 开始传输数据了。

四次挥手: 终止TCP链接,就是指断开一个TCP链接时,须要客户端和服务端总共发送4个包以确认链接的断开。 在Socket编程中,这一过程由客户端或服务端任一方执行close来触发,具体流程图以下:

  • 第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入 FIN_WAIT_1状态
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同, 一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
  • 第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK 状态。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。 另外也多是同事发起主动关闭的状况:

另外还可能有一个常见的问题就是:为何创建链接是三次握手,而关闭链接倒是四次挥手呢? 答:由于服务端在LISTEN状态下,收到创建链接请求的SYN报文后,把ACK和SYN放在一个报文里 发送给客户端。而关闭链接时,当收到对方的FIN报文时,仅仅表示对方再也不发送数据了可是还 能接收数据,己方也未必所有数据都发送给对方了,因此己方能够当即close,也能够发送一些 数据给对方后,再发送FIN报文给对方来表示赞成如今关闭链接,所以,己方ACK和FIN通常都会 分开发送。


UDP协议详解

UDP(User Datagram Protocol)用户数据报协议,非链接的协议,传输数据以前源端和终端不 创建链接,当它想传送时就简单地去抓取来自应用程序的数据,并尽量快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽 的限制;在接收端,UDP把每一个消息段放在队列中,应用程序每次从队列中读一个消息段。 相比TCP就是无需创建连接,结构简单,没法保证正确性,容易丢包

——上述内容部分摘自:

TCP/IP三次握手与四次挥手

TCP和UDP的区别(转)

相关文章
相关标签/搜索