记录自己的学习之路~

第一次写博客

通过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()

缓冲区概念:系统自动的在内存中为每一个正在使用的文件开辟一个缓冲区,从内存向磁盘输出数据必须先送到内存缓冲区,再由缓冲区送到磁盘中去。从磁盘中读数据,则一次从磁盘文件将一批数据读入到内存缓冲区中,然后再从缓冲区将数据送到程序的数据区。
刷新缓冲区条件:

  1. 缓冲区被写满
  2. 程序执行结束或者文件对象被关闭
  3. 行缓冲遇到换行
  4. 程序中调用flush()函数

文件偏移量:
打开一个文件进行操作时系统会自动生成一个记录,记录中描述了我们对文件的一系列操作。其中包括每次操作到的文件位置。文件的读写操作都是从这个位置开始进行的。

tell()
功能:获取文件偏移量大小

seek(offset[,whence])
功能:移动文件偏移量位置
参数:offset 代表相对于某个位置移动的字节数。负数表示向前移动,正数表示向后移动。
whence是基准位置的默认值为 0,代表从文件开头算起,1代表从当前位置算起,2 代表从文件末尾算起。

必须以二进制方式打开文件时基准位置才能是1或者2

文件管理函数

  1. 获取文件大小: os.path.getsize(file)
  2. 查看文件列表:os.listdir(dir)
  3. 查看文件是否存在:os.path.exists(file)
  4. 判断文件类型:os.path.isfile(file)
  5. 删除文件:os.remove(file)

网络IO

OSI七层模型

制定组织: ISO(国际标准化组织)

作用:使网络通信工作流程标准化

应用层 : 提供用户服务,具体功能有应用程序实现
表示层 : 数据的压缩优化加密
会话层 : 建立用户级的连接,选择适当的传输服务
传输层 : 提供传输服务
网络层 : 路由选择,网络互联
链路层 : 进行数据交换,控制具体数据的发送
物理层 : 提供数据传输的硬件保证,网卡接口,传输介质

优点:

1.建立了统一的工作流程
2.分部清晰,各司其职,每个步骤分工明确
3.降低了各个模块之间的耦合度,便于开发

四层模型(TCP/IP模型)

背景 : 实际工作中工程师无法完全按照七层模型要求操作,逐渐演化为更符合实际情况的四层

TCP/IP模型

记录自己的学习之路~

数据传输过程:

  1. 发送端由应用程序发送消息,逐层添加首部信息,最终在物理层发送消息包。
  2. 发送的消息经过多个节点(交换机,路由器)传输,最终到达目标主机。
  3. 目标主机由物理层逐层解析首部消息包,最终到应用程序呈现消息.

传输层服务

面向连接的传输服务(基于TCP协议的数据传输)

传输特征 : 提供了可靠的数据传输,可靠性指数据传输过程中无丢失,无失序,无差错,无重复。

实现手段 : 在通信前需要建立数据连接,通信结束要正常断开连接。

三次握手(建立连接)
  1. 客户端向服务器发送消息报文请求连接
  2. 服务器收到请求后,回复报文确定可以连接
  3. 客户端收到回复,发送最终报文连接建立
四次挥手(断开连接)
  1. 主动方发送报文请求断开连接
  2. 被动方收到请求后,立即回复,表示准备断开
  3. 被动方准备就绪,再次发送报文表示可以断开
  4. 主动方收到确定,发送最终报文完成断开

适用情况 : 对数据传输准确性有明确要求,传数文件较大,需要确保可靠性的情况。比如:网页获取,文件下载,邮件收发。
面向无连接的传输服务(基于UDP协议的数据传输)
传输特点 : 不保证传输的可靠性,传输过程没有连接和断开,数据收发*随意。

适用情况 : 网络较差,对传输可靠性要求不高。比如:网络视频,群聊,广播

socket套接字编程

套接字介绍
套接字 : 实现网络编程进行数据传输的一种技术手段

Python实现套接字编程:import socket

套接字分类

流式套接字(SOCK_STREAM): 以字节流方式传输数据,实现tcp网络传输方案。(面向连接–tcp协议–可靠的–流式套接字)
服务端(sever)流程:

  1. 导入socket模块:from socket import *
  2. 创建流式套接字:sockfd=socket(AF_INET,SOCK_STREAM)
  3. 绑定地址:sockfd.bind=((0.0.0.0/127.0.0.1/本机ip地址,8899)),地址三选一,端口号1024-65535中选一个;
  4. 设置监听:sockfd.listen(n)
  5. 等待处理客户端连接请求:connfd,addr=sockfd.accept()
  6. 消息发送:date=connfd.recv(1024) print(“打印消息内容”) n=connfd.send()
  7. 关闭套接字:sockfd.close()

用户端(client):

  1. 导入socket模块:from socket import *

  2. 创建流式套接字:sockfd=socket(AF_INET,SOCK_STREAM)

  3. 请求连接:sever_addr=(0.0.0.0/127.0.0.1/本机ip地址,8899)
    sockfd.connect(server_addr)

  4. msg=input(“输入:”) sockfd.send(msg.encode()) print(“打印消息内容”) sockfd.recv(date)

  5. 关闭套接字:sockfd.close()

数据报套接字(SOCK_DGRAM):以数据报形式传输数据,实现udp网络传输方案。(无连接–udp协议–不可靠–数据报套接字)