网络基础教程:快速掌握网络入门知识

更新:11-12 民间故事 我要投稿 纠错 投诉

各位老铁们好,相信很多人对网络基础教程:快速掌握网络入门知识都不是特别的了解,因此呢,今天就来为大家分享下关于网络基础教程:快速掌握网络入门知识以及的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

1.为什么要学习网络编程?---pptx简介。

2.网络基本概念---pptx简介。

什么是网址?

HTTP简介

网络开发解决方案

(1) Apple 原生(独立)解决方案

1NSURL连接

* iOS2.0的出现使用简单,是最古老、最经典、最直接的解决方案。

*iOS5.0之前,使用起来比较麻烦,代理方法很多。

*iOS5.0之后又进行了一层改进,提供了两种非常方便的方法,让发送网络请求变得更加容易。一句基本的代码就可以解决简单的网络处理。

2NSURL会话

* iOS7的新技术与NSURLConnection并行。

*但是功能比NSURLConnection强大,性能也比NSURLConnection好很多

*当程序在前台时,NSURLSession和NSURLConnection大部分可以互相替代,但是NSURLSession支持后台网络操作,除非用户强制关闭。

*Apple官方建议使用NSURLSession而不是NSURLConnection。

NSURLSession : 提供的功能

1)通过URL下载数据到内存;

2)通过URL下载数据到文件系统;

3)上传数据到指定URL;

4)在后台完成以上功能。

5) 支持下载、断点续传、后台上传/下载、后台上传/下载任务跟进

3CFNetwork:NSURL*底层,纯C语言,开发中几乎没用过。

(2)第三方框架

1ASIHttpRequest:绰号“HTTP终结者”,功能极其强大,几乎没有它不能考虑的问题。不幸的是,MRC环境于2012年10月停止更新。最底层是CFNetwork。

2AFNetworking:简单易用。提供的常用功能基本够用了。它有很多维护和用户。使用它时,程序员不需要知道什么是URL、什么是线程、什么是线程间通信。最底层是NSURLSession和NSURLConnection。

3MKNetworkKit:简单易用,产自桑格故乡印度,维护和用户很少。最底层是NSURLConnection

建议:为了提高开发效率,企业基本采用第三方框架进行开发

3. NSURLConnection的常用方法

1).创建NSURL对象并确定要访问的资源路径。

2)根据url和服务器请求数据创建请求对象NSURLRequest

3)、建立网络链接并向服务器发送请求对象(同步或异步)

代码演示--访问百度

//1. NSURL : 确定要访问的资源路径

//m:mobile代表手机端访问的路径。一般大公司都会提供专门的手机访问路径。

NSURL *url=[NSURL URLWithString:@"http://m.baidu.com/"];

//2. NSURLRequest:根据url创建一个request对象,并向服务器请求数据。

NSURLRequest *reuqest=[NSURLRequest requestWithURL:url];

//3.建立网络链接并向服务器发送请求(同步或异步)

[NSURLConnection sendAsynchronousRequest:reuqest 队列:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *响应,NSData *数据,NSError *connectionError) {

NSLog(@"------%@",数据);

}];

4.SendAsynchronousRequest方法及参数解释:

sendAsynchronousRequest:是异步的,NSURLConnection会打开一个线程并发送网络请求。

queue:队列——负责调度/执行completionHandler的队列。

completionHandler: 完成请求的回调块。表示收到服务器的响应数据。

如何选择队列?

*如果需要接收数据后直接更新UI,请选择主队列。

*如果你想做一个耗时的操作,比如下载一个zip文件并在下载后解压,请选择创建一个新队列。

5.使用UIWebView加载请求百度返回的字符串---显示百度首页

//1. NSURL : 确定要访问的资源路径

NSURL *url=[NSURL URLWithString:@"http://m.baidu.com/"];

//2. NSURLRequest:根据url创建一个request对象,并向服务器请求数据。

NSMutableURLRequest *reuqest=[NSMutableURLRequest requestWithURL:url];

//2.1.告诉服务器附加信息

//告诉服务器我是iPhone

[reuqest setValue:@"iPhone AppleWebKit"forHTTPHeaderField:@"用户代理"];

//3.建立网络链接并向服务器发送请求(同步或异步)

[NSURLConnection sendAsynchronousRequest:reuqest 队列:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *响应,NSData *数据,NSError *connectionError) {

//将二进制数据转换为字符串

NSString *html=[[NSString alloc] initWithData:data 编码:NSUTF8StringEncoding];

//baseURL: 为加载资源的参考路径。

[self.webView loadHTMLString:html baseURL:url];

}];

NSMutableURLRequest 对象的作用是什么?

*根据URL和服务器请求数据创建请求对象

* 告诉服务器附加信息:设置请求头和请求体。在网络访问期间,大多数更改都是通过请求对象设置的。如身份验证、cookie、浏览器类型、超时长度等。

2.套接字编程

1.网络传播三要素

IP地址【主机名】,英文全称是:Internet Protocol Address,又译为互联网协议地址

*网络中设备的标识符用于唯一标识每台计算机。通常现在常用的IP地址是IPV4地址。

* IPV4有4段数字,格式为xxx.xxx.xxx.xxx。每个数字由8位二进制组成,取值范围为0~255。

* IPv4使用32位地址长度,只有大约43亿个地址。 IPv4 定义的有限地址空间将被耗尽。

*为了扩大地址空间,计划通过IPV6重新定义地址空间。 IPv6 使用128 位地址长度。地址的提供几乎没有任何限制。但IPV6尚未正式普及。

*为了解决IPV4地址空间有限的问题,IP地址分为内部网络地址和外部网络地址。 (比如校园网,每个学生都会有一个内网地址,学校会有一个路由器,路由器也会有一个外网地址,学生想要访问外网就必须经过路由器。如只要通过同一个路由器出去,它们对应的外网地址都是一样的)

*基本上所有网络访问都是通过IP 地址进行的。域名是一种简写形式,无需记住IP地址的复数。

*本地环回地址:127.0.0.1 主机名:localhost

每台电脑都有一个127.0.0.1

如果无法ping通127.0.0.1,说明网卡没有工作(比如安装黑苹果,检查网卡驱动是否安装,就可以ping回环回地址)

如果无法ping通本地地址,则说明网线损坏。

TIP:可以通过ip138.com快速查询域名对应的IP地址。

端口号

1).通过打电话的例子解释一下端口号的作用。

*许多网络概念来自电话

*电话号码类似于IP

*分机号码与端口类似

2)、端口号的作用

* 用于标识进程的逻辑地址以及不同进程的标识。

*有效端口:0~65535。

*端口0~1024由系统使用或保留。

*开发过程中不要使用1024以下的端口。

(端口有什么用?我们知道,一台拥有IP地址的主机可以提供很多服务,比如Web服务、FTP服务、SMTP服务等,这些服务完全可以通过一个IP地址来实现。那么,如何主机如何区分不同的网络服务呢?显然不能依靠IP地址,因为IP地址和网络服务的关系实际上是一对多的关系。)

传输协议(通信规则)---(需要先学习OSI网络模型)

1)、UDP(用户数据报协议)

*面向无连接的协议

*只发送,不确认对方是否收到

*将数据资源和目的地封装成数据包,无需建立连接

*每个数据包大小限制为64K

*因为不需要连接,所以它是一个不可靠的协议

* 无需建立连接,速度快

*了解了发报的特点就意味着了解了UDP协议的特点。

/*

例:地下党给组织或者上级发电报。

*/

2)、TCP(Transmission Control Protocol,传输控制协议)

*面向连接的协议。

*建立连接,形成传输数据的通道

* 连接内大数据传输(数据大小不受限制)

*连接是通过三次握手完成的,这是一个可靠的协议,并且是安全传递的。

*必须建立连接,效率会稍低

/*

简单描述一下三次握手过程:主机A向主机B发送连接请求包:“我想给你发数据,可以吗?”这是第一次对话;主机B向主机A发送连接请求和请求同步(同步是指两台主机一台在发送,另一台在接收,协调工作)数据包:“好的,那你什么时候发送?”这是第二次谈话;主机A又发送了一个数据包来确认主机B的请求同步:“我现在就发送,你可以继续!”这是第三次谈话。三个“会话”的目的是同步数据包的发送和接收。经过三次“对话”后,主机A正式向主机B发送数据。

*/

3)、使用场合

* tcp一般用于文件传输(ftp http对数据准确性要求较高,可能比较慢)、发送或接收电子邮件(pop imap smtp对数据准确性要求较高,不是紧急应用)、远程登录(telnet ssh对数据准确性要求较高)有一定的准确性要求,连接的概念)等;

* UDP一般用于即时通讯(QQ聊天对数据精度和丢包要求较低,但速度要快)、在线视频(rtsp速度要快才能保证连续视频,但偶尔会走一帧图像,而且人们还是可以接受的)、网络语音通话(VoIP语音数据包一般都比较小,需要高速发送,偶尔的中断或者串扰都没有问题)等。

网络通信的三要素可以用一句话来概括:通过IP找到机器,通过端口找到程序,通过协议确定如何传输数据。

2.OSI网络模型

OSI(Open System Interconnect),即开放系统互连。一般称为OSI参考模型,是ISO(国际标准化组织)于1985年研究的网络互连模型。

该架构标准定义了网络互连的七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。发送数据时,从第七层传递到第一层,接收数据时则相反。

3.Socket简介

1.pptx简介。

2.socket建立和连接

1导入三个头文件

进口

进口

进口

2创建套接字

/**

范围

domain:协议域/协议族,AF_INET(IPV4网络开发)

type: 套接字类型,SOCK_STREAM(TCP)/SOCK_DGRAM(UDP,消息)

protocol: IPPROTO_TCP,协议,如果输入0,可以根据第二个参数自动选择协议

返回值

socket,如果为0则表示成功

*/

intclientSocket=套接字(AF_INET, SOCK_STREAM,0);

3 连接到服务器

/**

范围

1 个客户端套接字

2 指向数据结构sockaddr的指针,其中包括目标端口和IP地址。即服务器的“结构体”地址

3 结构数据长度

返回值

0 成功/其他错误代码,0 或true

*/

structsockaddr_in 服务器地址;

//协议族

服务器地址.sin_family=AF_INET;

//通过IP查找机器

serverAddress.sin_addr.s_addr=inet_addr("127.0.0.1");

//端口号查找程序

serverAddress.sin_port=htons(12345);

//连接到服务器

intresult=connect(clientSocket, (conststructsockaddr *)serverAddress,sizeof(serverAddress));

如果(结果==0){

NSLog(@"成功");

}别的{

NSLog(@"失败");

}

TIP:

在用C语言开发时,如果要传递一个结构体的地址,通常会将结构体的长度一起传递。由于C语言中的数据是通过指针寻址的,所以告知长度的目的是为了防止取错数据。

在终端输入:nc -lk12345 相当于在本机启动了一个服务器,ip是本机地址,端口号是12345。

4发送和接收数据

//发送数据

/**

范围

1 个客户端套接字

2发送内容地址void *==id

3发送内容长度指的是字节长度。

4发送方式标志,一般为0

返回值

如果成功,返回发送的字节数,否则返回SOCKET_ERROR

*/

NSString *msg=@"关于?";

ssize_t sendLenght=send(clientSocket, msg.UTF8String, strlen(msg.UTF8String),0);

NSLog(@"已发送字节长度%ld,字符串长度%zd", sendLenght, msg.length);

//接收数据

/**

范围

1 个客户端套接字

2接收内容地址

3 长度,表示服务器一次返回的最大字节数。

4、接收标志,一般填0,表示阻塞,等待服务器返回数据。

返回值

接收数据长度

*/

//缓冲区,准备接受来自服务器的数据

//在C语言中,数组的名称是指向数组第一个元素的指针。

uint8_t 缓冲区[1024];

ssize_t recvLen=recv(clientSocket, buffer,sizeof(buffer),0);

NSLog(@"接收%ld字节",recvLen);

//获取服务器返回的二进制数据

NSData *data=[NSData dataWithBytes:buffer length:recvLen];

//将二进制数据转换成字符串

NSString *resultStr=[[NSString alloc] initWithData:data 编码:NSUTF8StringEncoding];

NSLog(@"接收到的内容为:%@",resultStr);

5关闭连接

//断开

关闭(clientSocket);

4.Socket聊天示例

补充:智能家居原理介绍。

5. 沟通流程

1socket发送http请求---请求本地apache服务器

准备:

Mac自带Apache服务器,启动apache服务器。

相关命令

* sudo apachectl -v,显示apache版本。

* sudo apachectl start,启动apache。

代码实现:

//建立连接

if(![selfconnectionToHost:@"127.0.0.1"port:80]) {

NSLog(@"失败");

返回;

}

NSLog(@"成功");

//向服务器发送请求数据

NSString *result=[selfsendAndRecv:@"我想成为一名出色的程序员"];

NSLog(@"%@",结果);

问:服务器能收到:发给服务器的数据吗?会有回应吗?

可以接收数据,但不会有任何响应。原因是服务器不知道客户端发送的内容。

思考

1).客户端应该向服务器发送什么格式的数据?只有服务器才能理解。

2)服务器应该返回什么格式的数据给客户端?只有客户才能理解。

//向服务器发送请求数据

//请求字符串,指定请求头和请求行

NSString *request=@"GET /abcd.txt HTTP/1.1rn"

"Host:localhostrnrn";

/**

URL与请求:的对应关系

例如,URL 为:http://localhost/abcd.txt。协议头https由HTTP/1.1指定,主机地址由Host:localhost指定,路径由/abcd.txt指定。

*/

NSString *结果=[selfsendAndRecv:request];

NSLog(@"%@",结果);

#获取本地apache服务器:的根目录

#在终端输入命令more /etc/apache2/httpd.conf并回车

#搜索DocumentRoot以获取/Library/WebServer/Documents

2socket发送http请求---请求远程服务器(百度、京东、起点)

/**

*连接远程服务器(百度、京东、起点)

*/

- (void)connectionToRometionServer{

//百度:域名m.baidu.comip:61.135.185.17

//起点:域名m.qidian.comip:36.250.76.204

//京东:域名m.jd.comip:111.206.227.150

//建立连接

if(![selfconnectionToHost:@"111.206.227.150"port:80]) {

NSLog(@"失败");

返回;

}

NSLog(@"成功");

//向服务器发送请求数据

NSString *request=@"GET/HTTP/1.1rn"

"Host:m.jd.comrn"

"用户代理:iPhone AppleWebKitrn"

"Connection:关闭rnrn";

NSString *结果=[selfsendAndRecv:request];

//在返回的结果中搜索rnrn,目的是提取响应状态行和响应头的内容

NSRange范围=[结果rangeOfString:@"rnrn"];

if(range.location !=NSNotFound) {

NSString *html=[结果substringFromIndex:range.location];

NSLog(@"======%@",html);

//加载网页

[self.webView loadHTMLString:html baseURL:[NSURL URLWithString:@"http://m.jd.com"]];

}

NSLog(@"--------%@",结果);

}

#TIP:ping域名会得到对应网站的IP地址。

非持久连接和持久连接的区别:

非持久连接是指一旦发起TCP连接,服务器就向客户端发送一个对象,而持久连接是指服务器可以在同一个TCP连接上向客户端发送多个对象。 HTTP/1.0的默认设置是非持久连接,而HTTP/1.1的默认设置是持久连接。

举个例子

当使用HTTP/1.0时,如果打开一个包含HTML文件和10个内联图像对象的网页,HTTP必须建立11个TCP连接才能将文件从服务器传输到客户端。使用HTTP/1.1 时,如果打开同一个文件,HTTP 会建立TCP 连接以将文件从服务器传输到客户端。

3Http通信流程

1.创建请求:

HTTP协议规定,一个完整的从客户端向服务器发送的HTTP请求需要包含以下内容:

1).请求行:指定了请求方法、请求资源路径和HTTP协议版本。

#/表示访问根目录

获取/HTTP/1.1

2)。请求头:描述了客户端的环境、客户端请求的主机地址等信息。

*请求头至少包含以下信息

#客户端要访问的服务器主机地址

主机:m.baidu.com

*请求头还可以包含以下信息

#客户端类型、客户端软件环境

用户代理:iPhone AppleWebKit

#客户端可以接收的数据类型

接受:text/html

#客户端语言环境

接受-Language:zh-cn

#客户端支持的数据压缩格式

接受编码:gzip

#访问结束后是否断开连接

连接:关闭

3)。请求体(可选) : 客户端向服务器端发送的具体数据,如要上传的文件数据。

请求格式:

在每个请求消息的末尾使用rn

在最后一个请求项的末尾使用rnrn 表示请求结束

#warming每个请求信息和rn之间不能有空格。

2. 接收响应

客户端向服务器发送请求,服务器应该响应,即返回数据给客户端。

HTTP协议规定:一个完整的HTTP响应包含以下内容

1).状态行:包含HTTP协议版本、状态代码和状态英文名称。

#HTTP/1.1200OK

2)。响应头:包含服务器的描述和返回数据的描述。

#Server: Apache-Coyote/1.1//服务器类型

#Content-Type: image/jpeg//返回数据类型

#Content-Length:56811//返回数据的长度

#Date: Mon,23Jun201412:54:52GMT//响应时间

3)。实体内容: 服务器返回给客户端的具体数据,例如文件数据

7. NSURLConnection的常用方法

1.服务器响应演练。

/**

*加载数据

*/

- (void)加载数据{

//1. 创建网址

NSURL *url=[NSURL URLWithString:@"http://pinyin.sogou.com/"];

//2.创建请求对象

//NSURLRequest *request=[NSURLRequest requestWithURL:url];

NSMutableURLRequest *请求=[NSMutableURLRequest requestWithURL:url];

[请求setValue:@"Mozilla/5.0(Macintosh;Intel Mac OS

]; // 3.发送异步请求到服务器(所有的网络请求都是耗时操作,因此绝大多数都是异步请求) [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { NSLog(@"%@---%@--%@---%@----%@",response,response.MIMEType,response.URL,response.textEncodingName,response.suggestedFilename); [self.webView loadData:data MIMEType:response.MIMEType textEncodingName:response.textEncodingName baseURL:url]; }]; } >response:本质上就是NSHTTPURLResponse从服务器上获得的响应 NSURLResponse相关属性: - URL:响应url,一般用来重定向使用。浏览器演示什么是重定向,百度搜索搜狗输入法。(没有重定向的情况下,响应url和请求url是相同) - MIMEType:请求数据的数据类型,服务器告诉客户端的返回的数据是什么类型。 Content-Type等价MIMEType,客户端根据MIMEType决定用什么来打开或显示返回的数据。(典型的列子就是浏览器装flash插件的例子。当在浏览器中看视频的时候,浏览器都会提示要安装flash插件,否则无法观看,浏览器就是通过MIMEType来判断观看视频需要flash插件的支持。) - textEncodingName:返回内容的编码方式 以下两个属性通常用于开发下载 - expectedContentLength:请求二进制数据的长度,下载文件的大小 - suggestedFilename:建议保存的文件名,服务器建议下载文件保存时使用的文件名,一般mac下下载文件不需要填写保存的文件名,就是因为浏览器客户端根据服务器返回的该字段作为文件名了。 2、错误处理:在实际开发中,一定要处理错误!任何的网络请求都有可能出错!比如流量没了,网络断了,没信号了。 //有时候没有错误,但也没有数据 if(connectionError !=nil|| data ==nil) { //提示用户最好友善点,不要太专业了。比如提示出现404错误,或500错误了。用户不会理解这些专业术语的。 NSLog(@"你的网络不给力哦!"); return; } 3、超时时长和缓存策略 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0timeoutInterval:15]; - cachePolicy:缓存策略 NSURLRequestUseProtocolCachePolicy =0,默认的缓存策略 NSURLRequestReloadIgnoringLocalCacheData =1,忽略本地缓存数据 一般应用于对数据‘实时性要求高’的应用每次都从服务器加载数据 应用场景:12306,股票,彩票等 NSURLRequestReloadIgnoringLocalAndRemoteCacheData =4,没有实现的缓存策略,可忽略 NSURLRequestReloadIgnoringCacheData = NSURLRequestReloadIgnoringLocalCacheData, //以下两项做离线应用 //在实际开发中,要尽量让用户回到网络上! NSURLRequestReturnCacheDataElseLoad =2,有缓存,就返回缓存数据,否则从服务器中加载。 NSURLRequestReturnCacheDataDontLoad =3,有缓存,就返回缓存数据,否则不加载。 如果应用需要通过广告,展现率,点击率,成交率来获得收入的,建议不要做离线缓存,原因主要有两点: 1>开发困难且周期长,需要设计两个数据库,一个本地数据库,用来缓存数据,一个远程数据库。 2>广告,展现率,点击率,成交率等操作都是基于网络的,离线不使用网络就无法产生收入。 NSURLRequestReloadRevalidatingCacheData =5,没有实现的缓存策略,可忽略 - timeoutInterval:请求的超时时长,在指定的时间内,如果没有收到服务器的反馈,认为请求失败。 系统默认60s SDWebImage超时时长15s

关于网络基础教程:快速掌握网络入门知识和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

用户评论

恰十年

想好好接触下网上世界,这篇文章刚好合适!

    有15位网友表示赞同!

玩味

刚开始接触网络,不知道从哪里下手,这篇“网络入门”很有帮助。

    有20位网友表示赞同!

娇眉恨

现在什么东西都离不开网络,还是学习一下这些基本知识比较好。

    有12位网友表示赞同!

冷月花魂

感觉自己对网络的了解还很有限,需要好好查阅一下这篇文章!

    有19位网友表示赞同!

浮光浅夏ζ

想要上网购物、娱乐都需要一些网络技能吧?这里应该有答案!

    有10位网友表示赞同!

嘲笑!

我从以前一直都是不太懂网络的,打算看看这篇文章能不能帮助我入门。

    有12位网友表示赞同!

葵雨

最近对网上的一些事情感到困惑,也许这篇文章能给我一些启发。

    有7位网友表示赞同!

限量版女汉子

想和朋友更方便地交流,感觉要先把网络基础打好才行啊!

    有20位网友表示赞同!

巴黎盛开的樱花

学习新技能总是一件很有成就感的事情!网络入门也不例外!

    有9位网友表示赞同!

我要变勇敢℅℅

学习一些简单的网络知识,才能更好地享受网上世界吧!

    有17位网友表示赞同!

余笙南吟

以前从来没有接触过这些网络技术,现在很期待学习新的东西!

    有17位网友表示赞同!

◆乱世梦红颜

看了这个标题,感觉很实用!想了解一下关于网络的基本知识。

    有18位网友表示赞同!

良人凉人

学习网络入门知识可以让我们更懂科技时代的发展吧!

    有20位网友表示赞同!

败类

也许这篇文章能解决我很多使用网络时遇到的问题!

    有11位网友表示赞同!

终究会走-

想要更好地融入现代社会,掌握一些网络技能是必不可少的!

    有14位网友表示赞同!

醉红颜

从零开始学习网络,感觉很有挑战性和乐趣!

    有18位网友表示赞同!

寻鱼水之欢

网络越来越重要了,学习一下相关的知识也方便我们生活。

    有13位网友表示赞同!

自繩自縛

希望这篇文章能让我对网络有一个清晰的了解

    有19位网友表示赞同!

莫飞霜

最近想要开通电商店铺,看来要先学习一些关于网络的基本知识才行!

    有18位网友表示赞同!

ok绷遮不住我颓废的伤あ

终于有时间好好学习一下网络入门了,期待收获满满!

    有5位网友表示赞同!

【网络基础教程:快速掌握网络入门知识】相关文章:

1.蛤蟆讨媳妇【哈尼族民间故事】

2.米颠拜石

3.王羲之临池学书

4.清代敢于创新的“浓墨宰相”——刘墉

5.“巧取豪夺”的由来--米芾逸事

6.荒唐洁癖 惜砚如身(米芾逸事)

7.拜石为兄--米芾逸事

8.郑板桥轶事十则

9.王献之被公主抢亲后的悲惨人生

10.史上真实张三丰:在棺材中竟神奇复活

上一篇:《中国古代经典诗歌三百首》之第17首 下一篇:如何获取百度极速版最新邀请码