计算机网络,基本上可以抽象是端的通信。实际在通讯中会用到不同的设备,不同的硬件中,为了能友好的传输信息,那么建立一套规范就十分必要了。先来了解一些基本概念

了解网络中传输的都是二进制数据流. 
2.了解网络编程概念.

认识网络:

//
网络概念

<1> 经常见到的:
网卡/网线/IP地址/子网掩码/路由地址/DNS服务器地址
作用?

// <2> 容易忽略的:MAC地址/数据/数据包

// <3> 网络编程的概念:客户端/服务器/请求/响应/数据流

// 网络是数据交互的媒介,我们通过网络得到服务器上的数据,也是通过网络给服务器传递数据.

// 也就是说,网络的实质,是交互数据.

0.移动网络应用 =
良好的UI + 良好的用户体验 +
实时更新的数据

1.网络是应用的灵魂,是所有应用的数据来源.离开了网络,我们的应用就是一潭死水.

网络编程概念:

<1>客户端(Client):移动设备(手机/iPad等手持设备).

客户端一般就是前端/前台等等.iOS,android开发都是前端开发.

<2>服务器(Server):为客户端提供服务(比如数据/资源等)的机器---本质也是一台计算机(+服务器软件).

服务器开发就是后端/后台开发.java/php/.net等.

<3>请求(Request):客户端向服务器索取数据.

<4>响应(Response):服务器对客户端请求做出的反应,一般就是返回数据给客户端.

服务器:按开发阶段来分,分为两种:

远程服务器:
外网服务器.应用上线之后供全体用户使用的服务器.速度取决于用户的网速和服务器的性能.

本地服务器:
内网服务器,测试服务器.开发测试阶段使用的服务器.供内部开发测试人员使用.速度飞快.

2.网络中传输的都是二进制数据流. html/图片/视频数据...

二进制数据流是如何被分组并传输的呢?

接下来了解一下概念

socket(插座/套接字) :通信模型
不属于七层协议.在 unix
系统中 规定:
"主机" +
"端口"
就叫做 socket.

所有的网络开发,基本都是基于socket来做的.最简单/最常见的
socket  ---> TCP/IP

"七层协议"

网络是分层的.

物理层:

两台计算机如何建立通信?

——>1.将计算机连接起来;2.负责传递信息。电信号(高(1)低(0)传输0和1)

定义很多规范:设备传输速率/接口规范

数据链路层

给数据分组(将0和1分组),规定数据的解读方式,规定一组数据就是一帧,——数据包。

以太网协议:(局域网协议,)规定数据的分组方式,(现在几乎大部分的分组)

网路层:主要建立“主机”和”到主机”之间的通信。

如何找到网络中唯一的一台计算机?————>

网络层引入一套地址机制,网络地址/网址/IP地址。

子网掩码分为两个部分:网络部分,主机部分

子网掩码和IP地址配合使用,确定当前计算机所在的子网络。

路由:信息如在不同的子网络传递,就叫做路由。

路由器:寻找一条最佳路径,在两个不同的子网络之间传递信息。

如何确定网络中传输的信息是发送给计算机中的一个应用程序?

网卡:每一个使用网络应用程序,信息都要经过网卡来进行传输。

传输层:主要建立端口到端口之间的通信,应用程序之间的通信

给每一个使用网卡的应用程序分配了一个编号,一般称之为“端口”号。端口号:0…~65535   0~1024系统保留端口号 。80 http

会话层:

建立一套自动的收发信息机制(建立在应用程序和应用程序之间)

表示层:解决不同系统之间通信的语法问题

应用层:规定了我们数据的传输格式

如http:协议 file; 邮件协议:ftp协议等

规定了数据的格式:

数据包:

两个部分:

标头部分:接收方和发送方 的MAc地址 :18字节

数据部分包含传输的信息:1500个字节

网络层;IP数据包   IP数据包的部分恰好能够放下一个,传输层数据包

表头:接收方和发送方的接收地址,数据部分:数据

数据包嵌套:上层数据包嵌套在下层数据包的数据部分,变动上层数据包,不会影响下层数据包的结构

网络在处理数据时候,会先处理IP数据包,再处理以太网数据包。

传输层:

端口号: 0 ~
65535. 0~1024
保留的端口号. 80

给每一个使用网卡的应用程序分配了一个编号.这个编号,一般称之为
"端口"

在传输信息的时候,附件端口号.

传输层:主要建立"端口"
到 "端口"之间的通信.应用程序之间的通信.

TCP:安全协议,三次握手协议 ,传输效率不高

UDP:报文头协议,只负责将信息传递出去,不管接收方是否接收到信息。

应用层:

应用层数据包,就是我们传递的网络数据.将应用层数据包封装在传输层的数据部分.

————————————————————————————————————————————————————————————————————————————

总结起来.:1理解网络
2.理解七层协议/五层模型
3.理解Socket.

{

应用层:
规定"应用程序"的数据格式. http / ftp /email
等.   //纸条上写的是啥?

传输层:
建立"端口"到"端口"之间的通信.
UDP/TCP 协议."端口".
//我们帮你传纸条

网络层:
确定每一台计算机的位置,建立"主机"到"主机"之间的通信.IPv4协议,"IP地址".
  // 女孩的位置

数据链路层:
确定1和0的分组方式.以太网协议:一组电信号就是一个数据包."MAC地址"/网卡/广播.
// 深情告白

物理层:
将电脑连接入网络,传输电信号1和0.     
// 一张白纸

互联网分层结构的好处:

上层的变动完全不影响下层的结构.

Socket : "主机 +
端口"就是"Socket(套接字/插座)"  ----- TCP/IP协议

}

—————————————————————————————————————————————————————————————————————————————

重点:1.理解数据包.
2.理解网络通信实质.

{

网络通信的基础:
知道对方的MAC地址和IP地址.

网络通信的实质:
互相交换数据包.

数据包:

每一个数据包都包含
"标头"和"数据"两个部分."标头"包含本数据包的一些说明."数据"则是本数据包的内容.

以太网数据包:
最基础的数据包.标头部分包含了通信双方的MAC地址,数据类型等.
'标头'长度:18字节,'数据'部分长度:46~1500字节.

IP数据包:
标头部分包含通信双方的IP地址,协议版本,长度等信息. 
'标头'长度:20~60字节,"数据包"总长度最大为65535字节.

TCP/UDP数据包:标头部分包含双方的发出端口和接收端口.  UDP数据包:'标头'长度:8个字节,"数据包"总长度最大为65535字节,正好放进一个IP数据包. 
TCP数据包:理论上没有长度限制,但是,为了保证网络传输效率,通常不会超过IP数据长度,确保单个包不会被分割.

应用程序数据包:
标头部分规定应用程序的数据格式.数据部分传输具体的数据内容.

嵌套:

数据包层层嵌套,上一层数据包嵌套在下一层数据包的数据部分.最后通通由以太网数据包来进行数据传递.

分包/拆包:

一般传递的数据都比较大,会将数据包分割成很多个部分来传递.

拼包:

将接收到数据包按序号拼接起来,组成完整的数据包.

/*----------------------------------  网络基础: 4.IP地址    ----------------------------------*/

重点:了解IP地址.

{

静态IP地址:

固定不变的IP地址,需要用户自己手动设置.

动态IP地址:

通过DHCP协议自动生成的IP地址.

DHCP协议:

通过DHCP协议,用户获得本机的动态IP地址,子网掩码,网关,DNS服务器等.

子网掩码:

与IP地址配合使用判断两台计算机是否位于同一个子网络.

DNS服务器:

可以将域名(网址)转换成IP地址.

}

/*----------------------------------  网络基础: 4.一个HTTP请求 --------------------------------*/

重点:了解一个HTTP请求的完整过程.

{

对之前所学内容的一个系统的演示.

1. URL(Uniform Resource Locator):

统一资源定位符.URL就是资源的地址,位置.通过一个URL能够找到互联网上唯一的一个资源.

URL的基本格式: 
协议://主机地址/路径

协议:不同的协议代表不同的资源查找方式,资源传输方式.

{

URL中的常见协议:

<1>HTTP:超文本传输协议,在网络开发中最常用的协议.访问的是远程的网络资源.格式:http://...

<2>file:访问的时本地计算机上的资源.格式:file://(不要再加主机地址了)

<3>FTP:访问的是共享主机的文件资源.格式:ftp://

<4>mailto:访问的是电子邮件地址.格式:mailto:

}

主机地址:存放资源的主机IP地址(域名).

路径:资源在主机中得具体位置.

2. HTTP请求的完整过程:

<1>
请求: 客户端发出请求.向服务器索要数据(操作数据).

<2>
响应: 服务器对客户端的请求做出响应.返回客户端所需要的数据.

3.
包装一个HTTP请求

用 NSURLRequest
来包装一个HTTP请求.可以指定缓存策略和超时时间.

1>
缓存策略的选择:NSURLRequestCachePolicy

{

NSURLRequestUseProtocolCachePolicy =
0,

// 默认的缓存策略,使用协议定义.

NSURLRequestReloadIgnoringLocalCacheData =
1,

// 忽略本地缓存,直接从原始服务器地址下载.

NSURLRequestReturnCacheDataElseLoad =
2,

// 只有在缓存中不存在数据时,才从原始地址下载

NSURLRequestReturnCacheDataDontLoad =
3,

// 只使用缓存数据,如果不存在缓存,则请求失败.
用于没有网络连接的离线模式

NSURLRequestReloadIgnoringLocalAndRemoteCacheData =
4,

// 忽略远程和本地的数据缓存,直接从原始地址下载

NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData =
1,

// 忽略缓存,直接从原始服务器地址下载.

NSURLRequestReloadRevalidatingCacheData =
5,

// 验证本地数据和远程数据是否相同,如果不同则下载远程数据,否则使用本地数据.

}

// 网络数据缓存

网络缓存数据,保存在SQLite的数据库中(NSHomeDirectory()),

//查看缓存的数据命令行:

cd 文件目录 (打开文件目录)

ls 查看当前文件下目录

sqlite3 Cache.db 打开数据库

.tables 查看数据库中的表单

select * from cfurl_cache_response; 查看服务器响应缓存

select * from cfurl_cache_receiver_data;
查看服务器返回的数据缓存

2>
默认的超时时间: timeoutInterval =
60

4.
发送请求

用 NSURLConnection
发送请求.

同步方法:

+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error;

异步方法:

+ (void)sendAsynchronousRequest:(NSURLRequest*) request queue:(NSOperationQueue*) queue

completionHandler:(void (^)(NSURLResponse* response, NSData* data, NSError* connectionError)) handler

"iPhone AppleWebKit"
制定客户端类型

}

客户端:手机/ipad/PC 移动互联网. 前端开发:IOS 安卓 浏览器/网页

后端开发:

服务器:就是一台计算机.

客户端都是通过服务器获得数据的.

线上服务器:app上线之后,访问的服务器.

测试服务器:app开发阶段使用的服务器.

数据库:服务器中的数据都来自于数据库.

请求:客户端向服务器所要数据的过程 --
发送一个网络请求

响应:服务器接收到客户端的请求之后,返回给客户端所需要的数据.

访问本机的地址:

127.0.0.1 本机的Ip地址.

本机域名:localhost

IP地址:网路管理分配内网IP

基本的概念有了,接下了就是看下在实际开发中

MAc系统,自带的Apache2,轻便易用,可以很方便在自己的PC上架设服务器

配置服务器

服务器配置步骤:

1> 打开服务器配置目录

cd /etc/apache2/

2> 查看当前目录下内容

ls

3> 修改服务器根路径

{

sudo vim httpd.conf  //进入服务器配置文件

/DocumentRoot 回车
//查找服务器默认根路径

将默认根路径 DocumentRoot
"/Library/WebServer/Documents"
注释掉;

在注释掉的根路径下面一行增加新的根路径

DocumentRoot "/Users/自己的用户名/Sites"

将 <Directory
"/Library/WebServer/Documents">
注释掉;

增加新的 <Directory
"/Users/l自己的用户名/Sites">

}

4> 保存退出

:wq 回车

"注意":如果感觉修改错误了,想重新进入修改,就做不保存退出的操作

不保存退出

:q! 回车

启动服务器

sudo apachectl -k start 或者 sudo apachectl start

关闭服务器:

sudo apachectl -k stop 或者 sudo apachectl stop

重新启动服务器

sudo apachectl -k restart 或者 $sudo apachectl restart

至此服务器就基本可以使用了,

打开浏输入:lcalhost(127.0.0.1)

如果可以看到Index of,服务器就架设成功了(bd.html,笔者放的测试文件)

也就是个人PC可以作为服务器了。

未完待续...

浅谈iOS网络编程之一入门的更多相关文章

  1. ios网络编程(入门级别)-- 基础知识

    在学习ios的过程中,停留在UI控件很长时间,现在正在逐步的接触当中!!!!!!在这个过程中,小编学到了一些关于网络编程知识,并且有感而发,在此分享一下: 关于网络请求的重要性我想不用多说了吧!!!对 ...

  2. 浅谈C#网络编程(一)

    阅读目录: 基础 Socket编程 多线程并发 阻塞式同步IO 基础 在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践. Socket是一种网络编程接口,它是对传输层T ...

  3. 浅谈C#网络编程(二)

    阅读目录: 异步IO 非阻塞式同步IO 基于回调的异步IO并发 异步IO 上篇提到用多线程处理多个阻塞同步IO而实现并发服务端,这种模式在连接数量比较小的时候非常适合,一旦连接过多,性能会急速下降. ...

  4. 浅谈iOS视频开发

     浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...

  5. 浅谈iOS中的userAgent

    浅谈iOS中的userAgent   User-Agent(用户代理)字符串是Web浏览器用于声明自身型号版本并随HTTP请求发送给Web服务器的字符串,在Web服务器上可以获取到该字符串. 在公司产 ...

  6. 浅谈iOS多线程

    浅谈iOS多线程 首先,先看看进程和线程的概念. 图1.1 这一块不难理解,重点点下他们的几个重要区别: 1,地址空间和资源:进程可以申请和拥有系统资源,线程不行.资源进程间相互独立,同一进程的各线程 ...

  7. iOS网络编程模型

    iOS网络编程层次结构也分为三层: Cocoa层:NSURL,Bonjour,Game Kit,WebKit Core Foundation层:基于 C 的 CFNetwork 和 CFNetServ ...

  8. IOS网络编程——第三方类库

    IOS网络编程——第三方类库 目录 概述 ASIHttpRequest AFNetworking 其他 概述 ASIHttpRequest AFNetworking 其他

  9. IOS网络编程:HTTP

    IOS网络编程:HTTP HTTP定义了一种在服务器和客户端之间传递数据的途径. URL定义了一种唯一标示资源在网络中位置的途径. REQUESTS 和 RESPONSES: 客户端先建立一个TCP连 ...

随机推荐

  1. Web前端面试常识

    大四校招即将席卷而来,现在临时抱抱佛脚,百度一下大概可能会问到的知识点,愿与君共勉吧! 1.Doctype(html4) A.strict   严格版本 B.transitional  过渡版本(防止 ...

  2. 如何为 Drupal 7 网站添加悬浮的反馈按钮?

    最近有客户咨询我们要怎么为 Drupal 网站添加悬浮按钮,方便访客能够链接到反馈表单页面.很幸运,使用 Feedback Simple 模块可以很容易实现. 在这篇短教程中,我将和大家分享如何添加链 ...

  3. 用Java开发代理服务器

    基础知识 不管以哪种方式应用代理服务器,其监控HTTP传输的过程总是如下: 步骤一:内部的浏览器发送请求给代理服务器.请求的第一行包含了目标URL. 步骤二:代理服务器读取该URL,并把请求转发给合适 ...

  4. oracle通过DBlink连接mysql(MariaDB)

    1.安装先装 mysql-connector-odbc(或 mariadb-connector-odbc )和unixODBChttps://downloads.mariadb.org/mariadb ...

  5. MySQL数据库获取汉字拼音的首字母函数

    需求简介:最近的一个项目,想实现如下图所示的显示效果.很明显,如果能够获取对应的汉字词组的拼音首字母就可以实现了,如果是固定的几个汉字,人为的拼一下就可以了,不过项目中有多处功能是需要这个效果的,并且 ...

  6. 二模07day2解题报告

    T1.采药(medic) 有n个草药,要在m的时间内获得最大价值. 乍一看像是01背包,然而数据只能过50分. 考虑数据范围,t<=10,w<=10,所以只有121种草药.考虑多重背包的二 ...

  7. plsql快捷开发

    最近在开发过程中,遇到一些麻烦,就是开发效率问题,有时候其他同事使用PLSQL 编程效率明显高于自己,观察了好久,才发现他使用PLSQL 已经很长时间了而且,他自己也在其中添加了好多快捷方式, 1.登 ...

  8. C和C++混合编译

    关于extern_C 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern "C" { #endif /**** som ...

  9. 重载(overload)、重写:覆盖(override)、重定义:遮蔽(redefine)、多态

    同一域名空间,函数名相同,签名不同 编译期绑定确定绑定函数,也称为静态多态 重写:覆盖(override) 虚函数 子类空间,函数名相同,签名相同 重定义:遮蔽(redefine) 非虚函数,子类成员 ...

  10. java 进制相互转换

    public class test{ public static void main(String[]args){ //十进制转二进制. public static void toBin(int nu ...