DAY18 networkBasis 网络基础2018-07-0

2018-07-07  本文已影响0人  十二右

01-networkTransmission 网路传输

02-HTTPprotocol协议

03-accessNetworkData获取网络数据

04-socketServer套接字服务器端

05-socketClient套接字客户端


01-networkTransmission 网路传输

1.1 传输过程示意

网络传输过程示意.png

1.2 OSI参考模型

OSI模型是国际标准化组织分析计算机通信,把计算机通信进行的规范和标准化分成了7层:

1.3-TCP/IP协议栈(簇)

TCP/IP协议栈

a.数据封装

数据封装.png

b.数据解封

数据解封.png

c.通信过程示意

通信示意.jpg

d.传输层的协议TCP和UDP

  1. 需要传输的文件分段传输
  2. 建立会话
  3. 可靠控制
  4. 流量控制
  1. 一个数据包就能完成数据通信
    2.不需要建立会话
  2. 不可靠传输
  3. 不需要流量控制
    可靠传输示意.png

02-HTTP协议

![UX3(4C0AGH0[R{J%X~AH22.png
![XW$4L%R9IJPZF(JIWL66X7.png

2.1 URL中常见的协议

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

2.file
访问的是本地计算机上的资源,格式是file://(不用加主机地址)

3.maito
访问的是电子邮件地址,格式是mailto:

4.FTP
访问的是共享主机的文件资源,格式是ftp://

2.2 HTTP协议简介

QQ图片20180706200903.png

a.HTTP协议的特点

b.

QQ图片20180706200903.png

c.请求

HTTP协议规定:1个完整的由客户端发给服务器的HTTP请求中包含以下内容

d.响应

客户端向服务器发送请求,服务器应当做出响应,即返回数据给客户端
HTTP协议规定:1个完整的HTTP响应中包含以下内容
*响应头:包含了对服务器的描述、对返回数据的描述
HTTP/1.1 200 OK // 包含了HTTP协议版本、状态码、状态英⽂名

Server: Apache-Coyote/1.1 // 服务器的类型
Content-Type: image/jpeg // 返回数据的类型
Content-Length: 56811 // 返回数据的⻓度
Date: Mon, 23 Jun 2014 12:54:52 GMT // 响应的时间

状态码 英文名称 中文描述
200 OK 请求成功
400 Bad Request 客户端请求的语法错误,服务器无法解析
404 Not Found 服务器无法根据客户端的请求找到资源
500 Internal Server Error 服务器内部错误,无法完成请求

e.发送HTTP请求的方法

■ 在HTTP/1.1协议中,定义了8种发送http请求的⽅法
p GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT、
PATCH
p根据HTTP协议的设计初衷,不同的⽅法对资源有不同的操作⽅式
✓ PUT :增
✓ DELETE :删
✓ POST:改
✓ GET:查
p最常⽤的是GET和POST(实际上GET和POST都能办到增删改查)
■ 要想使⽤GET和POST请求跟服务器进⾏交互,得先了解一个概念
参数:就是传递给服务器的具体数据,如登录时的帐号、密码

f.GET和POST对比

● GET和POST的主要区别表现在数据传递上
p GET
✓ 在请求URL后⾯以?的形式跟上发给服务器的参数,多个参数之间⽤&
隔开,⽐如
http://www.test.com/login?username=123&pwd=234&type=JSON
✓ 由于浏览器和服务器对URL⻓度有限制,因此在URL后⾯附带的参数
是有限制的,通常不能超过1KB
p POST
✓ 发给服务器的参数全部放在请求体中
✓ 理论上,POST传递的数据量没有限制(具体还得看服务器的处理能力)

选择GET和POST的建议:
如果要传递大量数据,比如文件上传,只能POST请求
GET的安全性比POST要差些,如果包含机密\敏感信息,建议POST
如果仅仅是索取数据(数据查询),建议使用GET
如果是增加、修改、删除数据,建议使用POST


03-accessNetworkData获取网络数据

python中使用第三方库requests来获取网络数据

import requests

3.1.确定请求的地址(url)

GET传参的两种方式:
a. 直接拼接在url后面(?参数=值&参数2=值2......)
b. 给get函数中的第二个参数传参({参数:值, 参数2:值, .....})

url = 'https://www.apiopen.top/satinApi'
  1. 通过GET方式请求数据,请求结束后会返回响应
response = requests.get(url, {'type':1, 'page':1})

3.3. 获取数据

print(type(response), response)

a.获取字符串形式的数据

print(type(response.text), response.text)

b.获取json格式的数据

result = response.json()
print(type(result), result)

c.获取二进制形式的数据

data = response.content
print(type(data), data)

04-socketServer套接字服务器端

socket又叫套接字,我们把进行网络通信的一端就叫一个套接字
socket编程,就是通过程序实现通信的两端(服务器和客户端)

python中支持socket有三种,分别是基于TCP/UCP和IP的,叫做TCP套接字/UDP套接字和原始套接字

import socket

基于TCP的服务器端

4.1.创建套接字对象,并且指定服务器类型

server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

4.2.绑定ip地址和端口

server.bind(('10.7.154.59', 12345))

4.3.监听访问

server.listen()
print('开始监听...')

让服务器一直运行,等待访问

while True:
    当有客户端访问当前服务器后就建立连接(会话)

    connect, addr = server.accept()   # 当有一个客户端来连接服务器的时候,才会执行
    print('====')

    # 通过会话给客户端发送消息
    # 发送的内容必须是二进制数

    字符串转二进制: 字符串.encode('utf-8')
    二进制转字符串: 二进制数据.decode('utf-8')
   
    message = input(':')
    connect.send(message.encode('utf-8'))

    #接收客户端发送给服务器的消息
    data = connect.recv(1024)
    print(data.decode('utf-8'))

    # 关闭连接
    # connect.close()

05-socketClient套接字客户端

import socket

5.1.创建套接字对象

client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

5.2.连接服务器

client.connect(('10.7.154.59', 12345))
while True:
    # 3.接收服务器返回的数据
    # 1024一次接收的数据大小
    data = client.recv(1024)
    print(data.decode('utf-8'))

    # 4.客户端给服务器发送数据
    message = input(':')
    client.send(message.encode('utf-8'))
上一篇 下一篇

猜你喜欢

热点阅读