一.网络编程


1.网络编程三要素

ip地址、端口、TCP协议

ip地址

ip地址作用: 根据ip地址能够找到网络中的具体设备(电脑,打印机)

ip地址概念: ip地址是网络设备的唯一标识

ip地址分类: ipv4 和 ipv6(号称世界上每一粒沙子都能分配到ipv6地址)

ipv6用八个四位十六进制数表示地址, 一个四位十六进制数可以表示65536个十进制数, ipv6地址一共有65535的8次方个, 即3.40*10的38次方个.

查看网络状态: ping ip地址/域名

域名: 可以理解成ip地址的别名

查看本机ip地址:   win->ipconfig    mac->ifconfig

常用本机地址:  localhost->127.0.0.1

端口(数据传输的通道)

端口号作用: 根据端口号能够找到网络设备上的程序端口

端口作用:  根据端口能够找到网络设备上的具体某个程序

端口号概念: 用于区分和管理端口的编号

端口概念: 端口是数据传输的通道(数据的必经之路)

端口号范围: 0-65535

端口号个数:  65536个

知名端口号: 0-1023

动态端口号: 1024-65535

协议(规定了数据传输的规则)

TCP协议: 传输控制协议

TCP协议特点: 面向连接,可靠,基于字节流传输

TCP面向连接步骤:  建立连接,传输数据,关闭连接

TCP可靠性: 发送应答机制,超时重传,错误校验,流量控制和阻塞管理

2.socket套接字

socket单词:  中文意思是插座

socket套接字: 网络多个进程中数据传输的工具(网上传送输入输出的装置)

进程概念: 运行中的程序

3.网络通信流程

1.根据ip地址找到网络设备(电脑,打印机)

2.根据端口号找到对应端口

3.根据端口找到对应程序

4.端口传输需要遵循协议规则

5.socket把数据从一个进程传送到另一个进程中

4.tcp开发服务器

TCP服务器开发固定7步:
1.创建socket服务器对象
2.绑定服务器信息(ip地址和端口号)
3.设置监听
4.等待客户端连接,直到连接成功为止
5.接收数据
6.发送数据
7.关闭socket服务器对象

8.设置端口复用(若出现端口不能重复使用, 就设置端口复用)

注: 先运行前7步, 若出现第8步的情况再设置第8步, 第8步在第2步绑定服务器地址和端口号前设置.

# 1. 创建socket服务器对象(买手机)
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # AF_INET代表ipv4,SOCK_STREAM代表tcp协议# 8.设置端口复用(如果出现端口不能重复使用,就设置端口复用)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)# 2. 绑定服务器地址和端口号(手机绑定卡,激活手机号)
server_addr = ('', 8081)
server.bind(server_addr)  # 参数是服务器地址# 3. 设置监听(开机)
server.listen(128)  # 参数是最大连接数# 4. 等着客户端连接,直到接通为止(等着接电话)
new_server, client_addr = server.accept()  # 注意: 返回值是元组,拆包:新的socket对象和客户端地址和端口号信息
print(f'{client_addr}客户端已连接')# 5. 从新的socket对象中接收客户端数据(听对方说什么)  注意: 接收的是二进制数据
client_data = new_server.recv(1024)  # 参数是接收的数据长度   返回值是客户端数据
print(f'客户端发来数据:{client_data.decode("gbk")}')  # 二进制->字符串: decode(编码格式)# 6. 给客户端发送数据(给对方回复)  注意: 发送也需要编码成二进制数据
new_server.send('我是服务器binzi'.encode("gbk"))  # 字符串->二进制: encode(编码格式)# 7. 关闭socket服务器对象(挂电话)
new_server.close()
server.close()

二.web服务器


1.http协议

http协议作用: 规定了浏览器和web服务器之间的通信格式

html概念: 超文本标记语言

http协议概念: 超文本传输协议

注意: http协议是基于TCP协议的(传输数据需要面向连接)

2.URL

URL(Uniform Resoure Locator):  统一资源定位符

举例->url: http://www.itheima.com/index.com?name=binzi&pwd=123456

协议部分: http://

域名部分: www.itheima.com

资源路径部分: /index.com

查询参数部分[可选]: ?name=binzi&pwd=123456

get方式: 有查询参数部分, 查询参数是在资源路径的?后拼接

post方式: 没有查询参数部分, 查询参数是放到了请求体里

3.开发者模式

如何进入开发者模式?
Windows和Linux平台按F12调出开发者工具
mac OS选择 视图 -> 开发者 -> 开发者工具或者直接使用 alt+command+i 这个快捷键
还有一个多平台通用的操作就是在网页右击选择检查。

开发者工具的标签选项说明:
元素(Elements)  :用于查看或修改HTML标签
控制台(Console):执行js代码
源代码(Sources):查看静态资源文件,断点调试JS代码
网络(Network)   :查看http协议的通信过程

开发者工具的Headers选项总共有三部分组成:
General: 主要信息
Response Headers: 响应头
Request Headers: 请求头
Response选项是查看响应体信息的

4,请求报文

请求报文: 请求方式不同,对应的报文结构不同

注意:每行末位默认有一个\r\n

get方式请求报文:  请求行  请求头  请求空行

post方式请求报文: 请求行  请求头  请求空行  请求体

5.响应报文

响应报文:  响应行  响应头  响应空行  响应体

具体响应格式:
响应行:  HTTP/1.1 200 OK
响应头:  Server: binzi
响应空行: \r\n
响应体:  页面

注意:每行末位默认有一个\r\n

常见状态码:
2xx: 访问成功   常见的是200
3xx: 重定向     常见的是301
4xx: 客户端错误  常见的是404
5xx: 服务器错误  常见的是500

6.web服务器返回一句话

# 1. 创建socket服务器对象(买手机)
import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # AF_INET代表ipv4,SOCK_STREAM代表tcp协议# 2. 绑定服务器地址和端口号(手机绑定卡,激活手机号)
server_addr = ('', 8084)
server.bind(server_addr)  # 参数是服务器地址
# 3. 设置监听(开机)
server.listen(128)  # 参数是最大连接数
# 4. 等着客户端连接,直到接通为止(等着接电话)
new_server, client_addr = server.accept()  # 注意: 返回值是元组,拆包:新的socket对象和客户端地址和端口号信息
print(f'{client_addr}客户端已连接')
# 5. 从新的socket对象中接收客户端数据(听对方说什么)  注意: 接收的是二进制数据
client_data = new_server.recv(1024)  # 参数是接收的数据长度   返回值是客户端数据
print(f'{client_data}')# [转换成响应报文]6. 给客户端发送数据(给对方回复)  注意: 发送也需要编码成二进制数据
res_line = 'HTTP/1.1 200 ol\r\n'
res_head = 'Server: binzi\r\n'
res_null = '\r\n'
res_body = '我是服务器~'
res_all = res_line + res_head + res_null + res_body
new_server.send(res_all.encode('gbk'))  # 字符串->二进制: encode(编码格式)# 7. 关闭socket服务器对象(挂电话)
new_server.close()
server.close()

7.web服务器返回一个页面

# 1. 创建socket服务器对象(买手机)
import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # AF_INET代表ipv4,SOCK_STREAM代表tcp协议# 2. 绑定服务器地址和端口号(手机绑定卡,激活手机号)
server_addr = ('', 8084)
server.bind(server_addr)  # 参数是服务器地址
# 3. 设置监听(开机)
server.listen(128)  # 参数是最大连接数
# 4. 等着客户端连接,直到接通为止(等着接电话)
new_server, client_addr = server.accept()  # 注意: 返回值是元组,拆包:新的socket对象和客户端地址和端口号信息
print(f'{client_addr}客户端已连接')
# 5. 从新的socket对象中接收客户端数据(听对方说什么)  注意: 接收的是二进制数据
client_data = new_server.recv(1024)  # 参数是接收的数据长度   返回值是客户端数据
print(f'{client_data}')# [转换成响应报文]6. 给客户端发送数据(给对方回复)  注意: 发送也需要编码成二进制数据
res_line = 'HTTP/1.1 200 ol\r\n'
res_head = 'Server: binzi\r\n'
res_null = '\r\n'# with open方式自动关闭文件对象
with open('index.html','rb') as f:res_body = f.read() # 读出来是二进制res_all = res_line + res_head + res_null
new_server.send(res_all.encode() + res_body)  # 字符串->二进制: encode(编码格式)# 7. 关闭socket服务器对象(挂电话)
new_server.close()
server.close()

三.fastapi框架


FastAPI简介: 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

FastAPI 框架关键特性: 高性能,易于学习,高效编码,生产可用

uvicorn: 异步服务器,用于配合fastapi框架一起 快速 搭建web服务器

安装

命令1: pip install fastapi

命令2: pip install uvicor

跳转页面

# 1.导包(注意: 自己创建的文件名不要叫fastapi)
from fastapi import FastAPI
from fastapi import Response
import uvicorn# 2.创建fastapi对象
app = FastAPI()# 3.fastapi处理web数据
# 访问url: http://127.0.0.1:8086/index.html
@app.get('/index.html')  # 参数是资源路径
def show():with open('index.html', 'rb') as f:res_body = f.read()  # 注意:读出来已经是二进制return Response(res_body)# 4.启动服务器
uvicorn.run(app, host='127.0.0.1', port=8086)

加载图片

# fastapi: 快速,高效,高性能,生产可用的最快python版本web框架
# 1.导包
from fastapi import FastAPI
from fastapi import Response
import uvicorn# 2.创建对象
api = FastAPI()# 3.处理web数据     举例: 网址url: http://127.0.0.1:8081/
@api.get('/')  # 自动跳转首页
def show():with open('index.html', 'rb') as f:res_body = f.read()return Response(res_body)# 注意: 如果跳转的页面包含图片,浏览器会自动发送请求:http://127.0.0.1:8081/picture.jpg
@api.get('/picture.jpg')  # 自动加载图片
def show():# 自动跳转首页with open('picture.jpg', 'rb') as f:res_body = f.read()return Response(res_body)# 4.启动服务器
uvicorn.run(api, host='127.0.0.1', port=8081)

加载视频

# fastapi: 快速, 高效, 高性能, 生产可用的最快的python版本web框架
# 1.导包
from fastapi import FastAPI, Response
import uvicorn# 2.创建对象
app = FastAPI()# 3.处理web数据
@app.get('/')  # 参数可以理解成是url的资源路径部分
def show():with open('F:\\00.heima\\就业班\\day04_220904\\课堂代码\\123\\index.html', 'rb') as fp:res_body = fp.read()res = Response(res_body)return res@app.get('/iu_03.jpg')  # 参数可以理解成是url的资源路径部分
def show():with open('F:\\00.heima\\就业班\\day04_220904\\课堂代码\\123\\iu_03.jpg', 'rb') as fp:res_body = fp.read()res = Response(res_body)return res@app.get('/HD.mp4')  # 参数可以理解成是url的资源路径部分
def show():with open('F:\\00.heima\\就业班\\day04_220904\\课堂代码\\123\\HD.mp4', 'rb') as fp:res_body = fp.read()res = Response(res_body)return res# 4.启动服务器
uvicorn.run(app, host='127.0.0.1', port=9092)

注: 要实现图片, 视频加载的功能, 需要在html文件中有相应的请求

python: 网络编程及fastapi快速搭建web服务器相关推荐

  1. 利用 python 的 http.server 包快速搭建web server 服务

    文章目录 利用 python 的 http.server 包快速搭建web server 服务 一.背景说明 二.一行代码解决搭建轻量级 web server 三.其外其他的配置可以参考下列网址 利用 ...

  2. Kali与编程:Winserver 2019 搭建web服务器7-05

    1.实验说明:Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以处理浏览器等Web客户端的请求并返回相应响应,也可以放置网站文件,让全世界浏览:可以放置数据文件,让全世界下载. ...

  3. 深入理解计算机系统:网络编程 下 一个简单的web服务器

    编写一个web服务器的基础是熟悉套接字接口.笔者因为还没有对其进行实践,只对其有一些粗浅的了解.本文重点记录一个web服务的核心功能主要由哪几部分组成. 1. main函数 之前写到,从客户端到服务器 ...

  4. 0成本快速搭建web服务器

    NATAPP工具使用 使用natapp内网穿透技术搭建服务器 利用serve本地电脑部署Web服务 使用natapp工具做内网穿透 使用natapp内网穿透技术搭建服务器 记录使用内网穿透技术搭建外网 ...

  5. 如何在Windows环境下快速搭建Web服务器并发布网页

    1. 环境说明 本案例基于Windows Server 2012环境进行搭建,其他Windows系统可参考配置. 2. 配置实现 1)开启 Windows 下程序和功能,如下图所示(红框中所有功能): ...

  6. python网络编程(基础含实现简易服务器代码)

    本文不涉及线程以及相关的死锁.互斥.共源等问题的解决 首先先搞清楚IP.端口号.TCP的概念: IP地址就是标识网络中设备的一个地址,IP 地址分为两类:IPv4 和 IPv6 查看IP地址的方法:L ...

  7. python flask 快速搭建 WEB 实战

    python flask 快速搭建 WEB 实战 tags: flask 文章目录 python flask 快速搭建 WEB 实战 1. app.py配置首页 2. views.py配置首页 3. ...

  8. ☀️苏州程序大白用万字解析Python网络编程与Web编程☀️《❤️记得收藏❤️》

    ☀️苏州程序大白用万字解析Python网络编程☀️<❤️记得收藏❤️> 目录

  9. python 网络编程_Python网络编程(原书第2版)

    Python网络编程(原书第2版) 作者:(美)埃里克·周(Eric Chou) 著 出版日期:2019年06月 文件大小:54.50M 支持设备: ¥68.00 适用客户端: 言商书局 iPad/i ...

最新文章

  1. docker常用命令详解
  2. matlab离散系统 响应,离散系统的频率响应和输出响应的matlab实现
  3. Binder 驱动详解(下)
  4. Vue实现访问百度音乐API实现播放音乐功能
  5. 以用户体验为导向的设计表现
  6. python中不属于整数类型_哪个选项不是Python语言的整数类型?
  7. 飞信SDK内容【转载】
  8. 睡眠音频分割及识别问题(五)--YAMNet进一步分析
  9. python分析工具有哪些_常用Python数据分析工具汇总
  10. 【英语学习】【WOTD】wherewithal 释义/词源/示例
  11. go语言struct各种定义和用法
  12. linux svn 客户端安装
  13. android自定义横向时间轴,Android自定义时间轴的实现过程
  14. 分享一个免杀的netcat.exe
  15. 在 Mac 上如何放大或缩小?
  16. Linux 命令行快捷键
  17. mysql可以用表情符号_让MySQL支持emoji表情符号存储
  18. 【python】自动统计考勤数据
  19. 《跟任何人都能聊得来》读书笔记
  20. 【转载】详解Android中接口回调、方法回调

热门文章

  1. 如何理解C语言中的字符串操作
  2. 还搬砖呢?快去表白!没准备好!!OMG,看我看我看我~
  3. 【PAT】1121. Damn Single (25)【哈希表】
  4. 网站手工添加一行数据_Power Query 抓取网贷问题平台数据
  5. 理财笔记 - 生日前的幻想
  6. 古老计算机的显卡,IT之家网友分享:带你看古老经典的PC硬件
  7. 22个最佳WordPress网站预约插件(2023)
  8. html输入浮点型,input框限定输入值为浮点型代码分享
  9. 安卓内嵌浏览器打开不微信等外部app的问题
  10. servlet上传图片