记录自己的学习之路~
第一次写博客
通过Markdown写博客学习新的编辑器,也以此来记录学习python的过程!
现在python学习到IO阶段,但是前面的知识有一些遗忘,希望接下来边学边复习巩固自己的基础,加油!
IO阶段学习了文件IO和网络IO,文件IO中学到文件打开方式open(“文件名”,“方式”)方式包含:r,w,a,r+,w+,a+,rb,wb,ab,rb+,wb+,ab+。
文件IO
通过.read/.readline/.readlines进行文件阅读。通常(1024)个字节串。
写入文件:.write/writeline/writelines。
关闭文件:.close()
缓冲区概念:系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存缓冲区,再由缓冲区送到磁盘中去。从磁盘中读数据,则一次从磁盘文件将一批数据读入到内存缓冲区中,然后再从缓冲区将数据送到程序的数据区。
刷新缓冲区条件:
- 缓冲区被写满
- 程序执行结束或者文件对象被关闭
- 行缓冲遇到换行
- 程序中调用flush()函数
文件偏移量:
打开一个文件进行操作时系统会自动生成一个记录,记录中描述了我们对文件的一系列操作。其中包括每次操作到的文件位置。文件的读写操作都是从这个位置开始进行的。
tell()
功能:获取文件偏移量大小
seek(offset[,whence])
功能:移动文件偏移量位置
参数:offset 代表相对于某个位置移动的字节数。负数表示向前移动,正数表示向后移动。
whence是基准位置的默认值为 0,代表从文件开头算起,1代表从当前位置算起,2 代表从文件末尾算起。
必须以二进制方式打开文件时基准位置才能是1或者2
文件管理函数
- 获取文件大小: os.path.getsize(file)
- 查看文件列表:os.listdir(dir)
- 查看文件是否存在:os.path.exists(file)
- 判断文件类型:os.path.isfile(file)
- 删除文件:os.remove(file)
网络IO
OSI七层模型
制定组织: ISO(国际标准化组织)
作用:使网络通信工作流程标准化
应用层 : 提供用户服务,具体功能有应用程序实现
表示层 : 数据的压缩优化加密
会话层 : 建立用户级的连接,选择适当的传输服务
传输层 : 提供传输服务
网络层 : 路由选择,网络互联
链路层 : 进行数据交换,控制具体数据的发送
物理层 : 提供数据传输的硬件保证,网卡接口,传输介质
优点:
1.建立了统一的工作流程
2.分部清晰,各司其职,每个步骤分工明确
3.降低了各个模块之间的耦合度,便于开发
四层模型(TCP/IP模型)
背景 : 实际工作中工程师无法完全按照七层模型要求操作,逐渐演化为更符合实际情况的四层
TCP/IP模型
数据传输过程:
- 发送端由应用程序发送消息,逐层添加首部信息,最终在物理层发送消息包。
- 发送的消息经过多个节点(交换机,路由器)传输,最终到达目标主机。
- 目标主机由物理层逐层解析首部消息包,最终到应用程序呈现消息.
传输层服务
面向连接的传输服务(基于TCP协议的数据传输)
传输特征 : 提供了可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无重复。
实现手段 : 在通信前需要建立数据连接,通信结束要正常断开连接。
三次握手(建立连接)
- 客户端向服务器发送消息报文请求连接
- 服务器收到请求后,回复报文确定可以连接
- 客户端收到回复,发送最终报文连接建立
四次挥手(断开连接)
- 主动方发送报文请求断开连接
- 被动方收到请求后,立即回复,表示准备断开
- 被动方准备就绪,再次发送报文表示可以断开
- 主动方收到确定,发送最终报文完成断开
适用情况 : 对数据传输准确性有明确要求,传数文件较大,需要确保可靠性的情况。比如:网页获取,文件下载,邮件收发。
面向无连接的传输服务(基于UDP协议的数据传输)
传输特点 : 不保证传输的可靠性,传输过程没有连接和断开,数据收发自由随意。
适用情况 : 网络较差,对传输可靠性要求不高。比如:网络视频,群聊,广播
socket套接字编程
套接字介绍
套接字 : 实现网络编程进行数据传输的一种技术手段
Python实现套接字编程:import socket
套接字分类
流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案。(面向连接–tcp协议–可靠的–流式套接字)
服务端(sever)流程:
- 导入socket模块:from socket import *
- 创建流式套接字:sockfd=socket(AF_INET,SOCK_STREAM)
- 绑定地址:sockfd.bind=((0.0.0.0/127.0.0.1/本机ip地址,8899)),地址三选一,端口号1024-65535中选一个;
- 设置监听:sockfd.listen(n)
- 等待处理客户端连接请求:connfd,addr=sockfd.accept()
- 消息发送:date=connfd.recv(1024) print(“打印消息内容”) n=connfd.send()
- 关闭套接字:sockfd.close()
用户端(client):
-
导入socket模块:from socket import *
-
创建流式套接字:sockfd=socket(AF_INET,SOCK_STREAM)
-
请求连接:sever_addr=(0.0.0.0/127.0.0.1/本机ip地址,8899)
sockfd.connect(server_addr) -
msg=input(“输入:”) sockfd.send(msg.encode()) print(“打印消息内容”) sockfd.recv(date)
-
关闭套接字:sockfd.close()
数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案。(无连接–udp协议–不可靠–数据报套接字)