登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

查看: 40|回复: 6

iOS开发笔记 - 网络篇,ios笔记软件

[复制链接]

235

主题

272

帖子

-1787

金钱

手工艺人

发表于 2018-1-8 10:42:46 | 显示全部楼层 |阅读模式

        

        


        



计算机网络基础

        

          计算机网络是多台独立自主的计算机互联而成的系统的总称,最初建立计算机网络的目的是实现信息传递和资源共享。

          如果说计算机是第二次世界大战的产物,那么计算机网络则是美苏冷战的产物。20世纪60年代初期,美国国防部领导的ARPA提出研究一种崭新的、能够适应现代战争的、生存性很强的通信系统并藉此来应对苏联核攻击的威胁,这个决定促使了分组交换网的诞生,也奠定今天计算机网络的原型,这是计算机网络发展史上第一个里程碑式的事件。

          第二个里程碑式的事件是20世纪80年代初,国际标准化组织(ISO)提出了OSI/RM(开放系统互联参考模型),该模型定义了计算机网络的分层体系结构,虽然该模型并没有成为网络设备制造商遵循的国际标准,但用分层的思想解决复杂系统设计问题的做法已经深入人心。成为事实标准(de facto standard)的是TCP/IP模型,而TCP/IP协议簇(协议簇通常指彼此相关联的一系列协议的总称)也是构成今天的Internet的基石。不同于OSI/RM的七层结构,TCP/IP模型是一个四层模型,从上到下依次是应用层、传输层、网络层、物理链路层。值得一提的是,传输层可以使用两种不同的协议,一个是面向连接的传输控制协议(TCP),另一个是无连接的用户数据报协议(UDP),我们耳熟能详的的协议如HTTP、FTP、Telnet、POP3、DHCP、DNS、ICQ等都属于应用层的协议,它们要么构建在TCP之上,要么构建在UDP之上。

        


        图1. TCP/IP模型和OSI/RM模型


          计算机网络发展史上第三个里程碑事件应该是浏览器的问世。20世纪90年代初,英国人Timothy John Berners-Lee发明了浏览器,浏览器通过超文本传输协议(HTTP)跟服务器交换超文本数据,通过图形用户界面显示从服务器获得的超文本数据,这一切都让使用Internet变得无比简单,于是计算机网络的用户数量开始爆炸式的增长。



基于HTTP协议联网

        

          在iOS开发中,如果应用程序需要的数据不在本地,而是通过网络获取的文字、图片、音视频等资源,那么我们的应用程序就需要联网,对于这种场景通常可以直接使用HTTP(Hyper-Text Transfer Protocol)向提供资源的服务器发出请求即可。HTTP协议对于很多人来说都不陌生,我们使用浏览器访问Web服务器的时候使用的基本上都是使用HTTP协议(有些服务器需要使用HTTPS,它是在HTTP下层添加SSL[Secure Socket Layer],用于安全的传输HTTP协议数据)。目前越来越多的应用已经从浏览器延伸到移动客户端,但是服务器端并不需要做出任何改变,iOS和Android的应用程序也可以通过HTTP协议和服务器通信。

          我们先来解释一下什么是协议以及HTTP到底是一个怎样的协议。我们将任何可发送或接收信息的硬件或程序称之为实体,而协议则是控制两个对等实体进行通信的规则的集合。简单的说,协议就是通信双方必须遵循的对话的标准和规范。HTTP是构建在TCP之上的协议,之所以选择TCP作为底层传输协议是因为TCP除了可以保证可靠通信之外,还具备流量控制和拥塞控制的能力,如果这一点不能理解也不要紧,我么只需要知道HTTP需要可靠的传输层协议的支持就够了。

          HTTP有两种类型的报文:请求报文和响应报文。请求报文和响应报文都是由三个部分组成的。我们可以用抓包工具截取请求和响应报文来看看它们的结构。

        


        图2. HTTP请求报文


          请求报文是由请求行、请求头和消息体构成的。请求行包含了命令(通常是GET或POST)、资源和协议版本;请求头是键值对映射形式的和请求相关的信息,如客户端使用的语言、使用的浏览器等信息;消息体是客户端发给服务器的数据;在请求头和消息体之间有一个空行。

        


        图3. HTTP响应报文


          响应报文是由响应行、响应头和消息体构成的。响应行包含了协议版本和状态码;响应头是键值对形式的和响应相关的信息,如服务器的软件版本、时间日期、缓存策略、响应内容类型等信息;消息体是服务器发给客户端的数据;在响应头和消息体之间有一个空行。



抓包工具

        

Charles

        


        图4. Charles启动界面


          Charles是一个HTTP代理服务器,HTTP监视器,反转代理服务器,它允许一个开发者查看所有连接互联网的HTTP通信。很多iOS开发者都选择Charles作为抓包工具来获取和测试网络接口。通过下图所示的菜单项可以将Charles设置为Mac系统的HTTP代理,所有的HTTP数据都会被Charles截获。

        


        图5. 将Charles设置Mac系统HTTP代理的菜单项


          当然,还可以将Charles设置为手机的代理,只要让安装了Charles的Mac系统和手机使用相同的网络,再将手机无线局域网的代理服务器设置为Mac系统的IP地址即可,这样手机上的HTTP数据也会被截获。

        


        图6. 手机设置无线局域网代理服务器


        


        图7. 指定代理服务器的IP地址和端口号




Wireshark

          Wireshark(原名Ethereal,1998年由美国Gerald Combs首创研发,由世界各国100多位网络专家和软件人员共同参与此软件的升级完善和维护,2006年5月更名为Wireshark)是一个非常专业的网络数据包截取和分析软件,它直接截获经过网卡的数据,并尽可能显示出最为详细的数据包信息,是协议分析的利器。Wireshark比Charles更底层更专业,但是如果只做HTTP数据分析,Charles用起来还是非常简单方便的。

        


        图8. Wireshark运行效果图




相关API

        NSURL

        NSURL是代表统一资源定位符(Universal Resource Locator,URL)的类。URL是互联网上标准资源的地址,互联网上的每个资源都有一个唯一的与之对应的URL。

        URL的格式如下所示:

[Java] 查看源文件 复制代码
协议://域名或IP地址:端口号/路径/资源

        下面是百度logo的URL:

[Java] 查看源文件 复制代码
http://www.baidu.com:80/img/bd_logo1.png


       

        说明:端口号是对IP地址的扩展。例如我们的服务器只有一个IP地址,但是我们可以在这台服务器上开设多个服务,如Web服务、邮件服务和数据库服务,当服务器收到一个请求时会根据端口号来区分到底请求的是Web服务还是邮件服务,或者是数据库服务。我们在浏览器中输入URL的时候通常都会省略端口号,因为HTTP协议默认使用80端口,也就是说除非你访问的Web服务器没有使用80端口,你才需要输入相应的端口号。

        下面的代码演示了如何在iOS应用中通过URL获取网络数据。

        Objective-C代码:

[mw_shl_code=java,true]
#import "ViewController.h"

#define CENTER_X CGRectGetWidth(self.view.bounds) / 2
#define CENTER_Y CGRectGetHeight(self.view.bounds) / 2

@interface ViewController ()

@end

@implementation

14

主题

6883

帖子

1189

金钱

手工艺人

发表于 2018-1-8 16:39:54 | 显示全部楼层
不错不错,楼主辛苦了。。。

19

主题

6907

帖子

2005

金钱

手工艺人

发表于 2018-1-8 17:13:07 | 显示全部楼层
感谢大神分享,必须顶!

18

主题

6891

帖子

1906

金钱

手工艺人

发表于 2018-1-8 18:04:22 | 显示全部楼层
不错不错,楼主辛苦了。。。

3

主题

6901

帖子

561

金钱

手工艺人

发表于 2018-1-8 19:32:02 | 显示全部楼层
不错不错,楼主辛苦了。。。

23

主题

6894

帖子

1056

金钱

iOS大神

Rank: 6Rank: 6

分享大神

发表于 2018-1-8 21:15:33 | 显示全部楼层
code4app好的代码demo真的很多,谢谢啦~

0

主题

6869

帖子

-519

金钱

限制会员

发表于 2018-1-9 00:47:25 | 显示全部楼层
虽不明,但觉厉...
*滑动验证:
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

每日头条

通过邮件订阅最新 Code4App 信息
上一条 /4 下一条

广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

快速回复 返回顶部 返回列表