网络知识点



NSUrlConnection  Xcode 7.0 以后过期 .  NSUrlSession   -----> 第三方 : AFNetworking { 3.0 之前的 . }

1. 网络常识 / 基础   -------> 认识网络 : 七层协议 / "Socket" 通信模型 ( 本地网络地址 /MAC 地址 /IP 地址 / 子网掩码 / 路由 ...)

2. 数据解析 ( 网络数据 ---> OC 数据 )

3. HTTP 协议

4. 文件上传

5. 文件下载 (NSUrlConnection 框架 )

6. NSUrlSession/AFNetworking

7. 综合实战 ( 数据时怎么来的 )

8. HTML/CSS/JS...

问题 : 网络中传递的都是二进制数据 ! 为什么 ?

网络协议 : 因为网络协议的 " 物理层 " 只能传递电信号 :( 0 1 )

从上往下 :( 用户 --> 设备 发送数据 : 我喜欢你 !

发送信息 : 从上往下   接收信息 : 从下往上 .

应用层 :
{
   
规定应用程序的数据传输格式 :
    {
        HTTP
协议 : 超文本传输协议 .
       
        ftp
协议 : 本地文件的传输协议 .
       
       
本地文件传输协议 : file: //
       
       
邮件协议 : mailto: //...
    }
}

表示层 :
{
   
不同系统之间通信的问题 ? MAC 的语法结构 windows 电脑的语法结构一样吗 ?
   
   
表示层解决了不同系统之间通信的语法问题 .
}

会话层 :
{
   
谁帮你接收信息 ? 谁帮你自动寻找 IP 地址 ...
   
   
建立一套 自动的 收发信息 , 自动网络寻址 , 自动匹配端口号 ...
}

传输层 :
{
    {
端口号 : 5001   信息内容 : 我喜欢你 }
   
   
1. 信息从计算机流出或者流入计算机的最后一条路口 ( 关口 ) 是什么 ? ------- 网卡 !
   
   
2. QQ , 微信 , 陌陌三个聊天软件 , 有一条聊天信息从网络中传递过来了 , 这个聊天信息是发送给哪一个软件 (app) ?
   
   
给每一个使用网卡的应用程序一个编号 :--- 这个编号就是 " 端口 " .
    {
        QQ:
5001
       
微信 : 6004
       
陌陌 : 7005
    }
   
    {
端口号 : 5001   信息内容 : 我很喜欢你 }
   
   
端口号 : 0 ~ 65535 0 ~ 1024 是系统占用的 1024 ~ 65535 : 自己设置端口号 .( 即时通信 )
   
    TCP
协议 : 安全连接协议 / 三次握手协议 .--- 应用最广泛的传输层协议 . 效率相比于 UDP . 一定能够保证接收方接受到数据 .
   
    UDP
协议 : 报文头协议 , 是不安全的 . 只负责发送信息 , 不管接收方是否能够接收到 .
   
   
传输层数据包
    {
        TCP
数据包 : 标头部分除了端口号 , 还有一些安全确认机制 .
       
        UDP
数据包 : 只有端口号 .
       
       
两者都包含标头 ( 都包含双方的 " 端口 " ) 数据两个部分
    }
}

网络层 :
{
    {
双方 :IP 地址 { 端口号 : 5001   信息内容 : 我喜欢你 }}

   
网络层就是建立 " 主机 " " 主机 " 之间的通信 . 找到网络中唯一的一台计算机 .
   
   
如何找到网络中唯一的一台计算机呢 ? IP 地址 .
   
   
引入一套新的地址机制 : 网络地址 / 网址 /IP 地址 . 每一台计算机都有自己唯一的 IP 地址 .
   
    IP
地址是一个大地址 : 国家 / 城市 / 县区 / 小区
    MAC
地址 : 你家的门牌号
   
   
网络拓扑结构 :
   
    IP
地址 :IP 地址来确定唯一的一台计算机
   
   
子网掩码 : 用来确定计算机所在的子网络 . IP 地址与 子网掩码做 " " 运算 , 得到的值就是这台计算机所在的子网络 !
   
   
61.135.169.121 : 百度服务器地址 { 百度 / 阿里 / 腾讯 : 服务器集群 }
   
   
路由 : 信息在不同的子网络之间传递 .
   
   
路由器 / 交换机 : 具有网络寻址功能 . 会帮我们寻找一条最佳的网络路径发送信息 .
   
    DNS
服务器 : 域名解析服务器 .( 将域名解析成 IP 地址 , 域名是方便记忆 IP 地址的符号 .)
   
    {
       
本机的 IP 地址 : 127.0.0.1
       
       
本机的域名 : localhost ( 没有手动配置 hosts)
       
        IP
地址 : 通过 DHCP 协议获取的动态 IP 地址 .
       
       
通过上面三种方式 , 都可以访问到自己的计算机 .
       
       
每一台计算机都可以是一个服务器 .(MAC 系统下 , 自带了 apache 服务器 )
    }
   
    IP
数据包 :
    {
       
标头 : 包含了双方的 IP 地址 .
       
       
数据 : 就是需要传递的数据 .
    }
}

数据链路层 :
{
    {
双方的 MAC 地址 { 双方 :IP 地址 { 端口号 : 5001   信息内容 : 我喜欢你 }}}
   
   
0101010101011111100000101010101001----乱写的
   
   
单纯地 0 1 没有实际意思 . 必须将 0 1 分组 , 并且规定解读方式 .
   
   
以太网协议 : 规定了 0 1 的解读方式 , 规定了 " 数据包 " 的概念 : 一帧数据就是一个数据包 .
   
   
以太网协议是一个局域网协议 .
   
   
最原始的通信依靠 MAC 地址 ( 网卡地址 ).
   
以太网数据包会将数据封装
   
   
以太网数据包
    {
       
标头 : 通信双方的 MAC 地址 .
       
       
数据 : 需要传递的数据内容 .
    }
}

物理层 : 两台电脑如何连接在一起 ?
{
    {
双方的 MAC 地址 { 双方 :IP 地址 { 端口号 : 5001   信息内容 : 我喜欢你 }}}
    {
0101010100100010100010100010101 }
   
网线 /WIFI( 有线 / 无线 ---> 电信号 ( ( 1 ) ( 0 ) 电平 )) , 规定了网络接口类型
   
   
// 1. 物理层负责将电脑连接起来 .
   
// 2. 物理层负责传递数据 0 1.
}

信息在网络中是如何传递的 ?
{
   
广播 : 在同一个子网络内 , 信息以广播的形式发送 .
   
   
路由 : 信息在不同的子网络之间传递 , 就是路由 .
}



{
    配置服务器 : 可以上传、分享、测试自己写的app主要的!
   
    1. 终端 .control+空格键搜索
    cd /etc/apache2/  进入 apache2 所在的文件目录 ;
   
    ls  
查看当前文件夹下的文件目录 .
   
    sudo vim httpd.conf         sudo
以管理员的权限打开 . vim ( 编辑器打开 )
   
    /DocumentRoot   /
vim 的查找命令 . /DocumentRoot  查找 DocumentRoot (Web 服务器的 ) 根路径
   
    shift + v (
选中这一行 )
    y 
复制这一行
    p 
在当前行下面粘贴复制那一行 .
   
    # vim 中是 注释的意思 .
   
    i 
vim 编辑器由 命令行模式 进入 编辑模式
   
    esc(电脑键盘上的esc)  vim 编辑器由 编辑模式 进入 命令行模式
   
   
2.
    /Options Follow 
查找这一行
   
   
Options Follow 中间插入 Indexes  让服务器以列表的形式呈现内容 .
   
    (
配置完毕之后的样子 'Options Indexes FollowSymLinks Multiviews' )
   
   
   
3.
    /php 
查找 php 所在的那一行 .
   
   
删除行首的 # .
   
    esc 
退出编辑模式 .
   
    :wq 
保存并退出 vim 编辑器 .
   
   
   
4. 启动服务器 .
   
    {
       
1. 启动服务器
       
        sudo apachectl -k restart
       
        sudo apachectl restart
       
       
2. 关闭服务器
       
        sudo apachectl -k stop
       
        sudo apachectl stop

       
如果出现下面的提示 , 说明服务器配置成功 :
       
    AH00558: httpd: Could not reliably determine the server
's fully qualified domain name, using teacherdeiMac.local. Set the ' ServerName ' directive globally to suppress this message
       
        httpd not running, trying to start
       
    }
   
}






学习点:
{
   
// mrc 的代码中,没有 weak ,只有 assign
   
// assign 修饰符号,对对象不做任何操作,只是简单的记录地址
   
// weak ARC 专有的,如果对象没有其他任何对象做强引用,会被立即释放!
   
// weak 的效率非常差!
   
// assign 会记录住地址,对象释放后,地址仍然保留,在 MRC 开发中,野指针错误非常频繁
   
// weak 安全性很好!一旦没有强引用,自动将地址设置为 nil OC 中可以向 nil 发送任何消息都不会报错
}




第三天 :get post 区别
// 网络数据缓存
网络缓存数据 , 保存在 SQLite 的数据库中 (NSHomeDirectory()),

// 查看缓存的数据命令行 :
cd
文件目录 ( 打开文件目录 )
ls
查看当前文件下目录
sqlite3 Cache.db
打开数据库
.tables
查看数据库中的表单
select * from cfurl_cache_response;
查看服务器响应缓存
select * from cfurl_cache_receiver_data;
查看服务器返回的数据缓存


URL:
使用注意
<
1 >URL , 所有的字符都必须是 ASCII ;
<
2 >URL 中不能出现中文和特殊符号 ( 如空格 );
所以 , 如果 URL 中出现了中文 , 需要添加百分号转译 .

// GET/POST 登陆 UI 界面的搭建注意 :
iphone6+
防边缘触摸
移动端应用默认应该记住密码
<
1 > 保存到用户偏好设置

版本管理
git

偏好设置保存用户信息

用户密码不能以明文的形式保存 , 需要对用户密码加密之后再保存 .

加密 :
<
1 > base64 :iOS 7.0 以后 , 苹果提供 base64 的编码解码支持 .

<
2 > MD5
<
1 > 加盐 : 加盐要足够长 , 足够复杂 .
<
2 >HMAC: 一个结合了散列函数的加密算法 ; 给定一个秘钥 , 分别作两次加密和散列 .
<
3 > 用户密码是动态变化的 . --- 时间戳密码
给定相同的加密算法和相同的密码明文 , 要求每次登陆的时候 , 密码都不一样 . 两个密码只要有一个相同就可以了
IP
辅助 / 手机绑定

<
3 > 钥匙串访问 iOS 7.0.3 以后支持 AES 256 加密 是安全的 .
SSKeyChain
是对底层 C 语言的封装 .
如果没有钥匙串访问 , 本地密码的保存会相当的繁琐 , 需要使用 RSA( 秘钥 ) & AES( 加密 & 解密 )
BundleID -------
应用程序的唯一的标识 , 每一个上架的应用程序 , 都有唯一的 BundleID
获取 BundleID: [NSBundle mainBundle].bundleIdentifier;

<
4 > 指纹识别
指纹识别 : 功能是 5 s 之后推出的 , SDK iOS 8.0 之后推出的 . 同时推出 ApplePay
推出的目的是简化支付 . 移动支付环节越简单越好 .

使用 :
<
1 > 导入头文件
#import <LocalAuthentication/LocalAuthentication.h>
< 2 > 使用

<
3 > 判断系统版本
当前系统版本 : [UIDevice currentDevice].systemVersion.floatValue


第四天 POST 增强

上传单个 / 多个文件

RESTfull
风格设计

JSON
序列化

模型转字典 KVC, 注意跟字典转模型相比较

快捷键 知识点
核心动画

归档解档 KVO

青花瓷 加载网易新闻数据

网络模型数据 , 字典转模型

用运行时 , 字典转模型

第五天 : 下载文件

HEAD
方法 ;
指向指针的指针用法 ;
NULL nil 的区别 .
NSNull
为了能够是数组和字典中使用空值

下载文件
NSFileHandle
// 文件句柄
NSOutputStream
// 数据流 注意删除存在的文件 , 防止多次下载文件越来越大

断点续传

子线程下载 , 运行循环 .

下载回调 (Block)

核心绘图 , 百分比显示进度条 ( 圆圈 ).

下载缓存池

NSOperation







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值