Python高级——04

4.1. 内容回顾

4.2. [重点]tcp简介

  • TCP 面向连接、可靠的、基于字节流的传输控制协议

  • TCP的特点

    • 面向连接
    • 可靠传输
      • 应答机制
      • 超时重传
      • 错误校验
      • 流量管控
  • TCP通信模型

    TCP严格区分客户端、服务端

4.3. [重、难点]tcp网络程序-客户端

  • 实现步骤

    • 导入模块

    • 创建套接字

      socket.SOCK_STREAM

    • 建立连接

      tcp_client_socket.connect( (“服务端ip”, 服务端端口) )

    • 发送数据

      tcp_client_socket.send(“内容”.encode())

    • 接收数据

      recv_data = tcp_client_socket.recv(1024)

      recv_data 是接收到的数据的二进制

    • 关闭连接

4.4. [重、难点]tcp网络程序-服务器

  • 导入模块

  • 创建套接字

  • 绑定端口

  • 开启监听(把套接字由主动设置为被动模式)

    tcp_server_socket.listen(128) 最大允许128个连接

  • 等待客户端连接

    new_client_socket,client_ip_port = tcp_server_socket.accept()

    new_client_socket 新的套接字,只是服务当前的客户端

    client_ip_port 客户端端口和ip地址

  • 使用新的套接字接收客户端发送的信息

    new_client_socket.recv(1024)

  • 关闭新的套接字

    new_client_socket.close() 关闭和当前客户端的连接

  • 关闭服务器套接字

    tcp_server_socket.close() 服务器不再接收新的客户端,老客户端可以继续服务

4.5. [重、难点]tcp网络程序-服务器增强

  • 循环接收多条信息

    while True:
            # recv() 会让程序再次阻塞,收到信息后再接阻塞
            recv_data = new_client_socket.recv(1024)
            # 当接受到数据为空的时候,表示客户端已经断开连接了,服务端也要断开
            # if len(recv_data)!= 0:
            # b'xxxx'
            # 如果recv_data 非空即为真,否则为假
            if recv_data:
                recv_text = recv_data.decode("GBK")
                print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text))
            else:
                print("客户端已经断开连接!")
                break
    
  • 循环接受多个客户端连接

    while True:
    
        new_client_socket, client_ip_port = tcp_server_socket.accept()
        print("新客户端来了:%s" % str(client_ip_port))
        # 6、收发数据
        while True:
            # recv() 会让程序再次阻塞,收到信息后再接阻塞
            recv_data = new_client_socket.recv(1024)
            # 当接受到数据为 空 的时候,表示客户端已经断开连接了,服务端也要断开
            # if len(recv_data)!= 0:
            # b'xxxx'
            # 如果recv_data 非空即为真,否则为假
            if recv_data:
                recv_text = recv_data.decode("GBK")
                print("接收到[%s]的信息:%s" % (str(client_ip_port), recv_text))
            else:
                print("客户端已经断开连接!")
                break
        # new_client_socket.close() 表示不能再和当前的客户端通信了
        new_client_socket.close()
    

    注意:必须等待第一个客户端断开后,第二个客户端才能有机会连接

4.6. [重、难点]案例:文件下载器(一)

  • 客户端

    目标:
    /home/demo/Document/python_projects/day04/1.txt
    下载到
    /home/demo/Desktop/1.txt

    1、导入模块
    2、创建套接字
    3、建立连接
    4、接收用户输入的文件名
    5、发送文件名到服务端
    6、创建文件,并且准备保存
    7、接收服务端发送的数据,保存到本地(循环)
    8、关闭套接字

  • 服务器:

    1、导入模块
    2、创建套接字
    3、绑定端口
    4、设置监听,设置套接字由主动为被动
    5、接受客户端连接
    6、接收客户端发送的文件名
    7、根据文件名读取文件内容
    8、把读取的内容发送给客户端(循环)
    9、关闭和当前客户端的连接
    10、关闭服务器

4.7. [重、难点]案例:文件下载器(二)

  • with open(“文件名”, 打开方式) as file

    file = open(文件名,打开方式)

4.8. tcp的3次握手

  • 三次握手是TCP建立连接的时候发送的三个数据包

1、概念

2、简单描述通信过程

3、必须是3次,如果少于3次,会造成系统资源的浪费

4.9. tcp的4次挥手

  • 四次挥手,指的TCP断开连接的时候发送4个数据包,确保断开连接

    1、概念

    2、简单描述过程

    3、必须是4次 (新连接收到老的数据包)

    4、主动发起断开的一方,必须等待2MSL时间

4.10. IP地址和域名

  • ip地址
    • ip地址网络中计算机的唯一标识,点分10进制构成
    • ipv4和ipv6
  • 域名
    • Doman name
    • 因为网络通信需要使用ip地址,但是ip地址不容易记忆,所以才有了更好记忆的域名
    • 特殊域名:localhost

4.11. DNS及浏览器请求服务器的过程

  • 浏览器–输入网址–>本地DNS服务器查询ip–>远程DNS服务器–>建立TCP连接
  • 本地DNS服务器是一个文件
    • Windows C:\Windows\System32\drivers\etc\hosts
    • Ubuntu /etc/hosts

4.12. HTTP协议概述

  • http 协议,超文本传输协议,主要用来发布和传输html页面(网页)

  • http协议2部分构成:

    • 请求协议
    • 响应协议

    协议由协议项来构成

    协议项:1)协议名 2)协议值

4.13. [重点]HTTP协议格式查看

  • 谷歌
    • 右键–>检查–>network–>刷新
    • 更多—》开发者工具
    • F12
  • 火狐
    • 右键–> 检查元素–》网络–》刷新

4.14. [重点]HTTP请求报文格式

  • 请求报文格式

    • 请求行

      请求方式 资源路径 协议及版本\r\n

    • 请求头

      协议项

      协议名: 协议值 \r\n

    • 请求空行

      请求空行的作用:分隔请求头和请求的主体

    • 请求主体

      浏览器要发送给服务端的内容

      get方式没有请求体,post方式才有请求体

4.15. [重点]HTTP响应报文格式

  • 响应协议

    • 响应行

      协议及版本 状态码 状态描述\r\n

      常见状态码:

      200 一切正常

      404 客户端请求的资源不存在

      302 重定向

    • 响应头

      协议项构成

      协议名 : 协议值\r\n

    • 响应空行

      分隔响应头和响应 主体

    • 响应主体

      服务器响应给客户端的数据

4.16. 长连接和短连接

  • 长连接

    一次连接,多次数据传输,通信结束关闭连接

    特点:

    要不连不上,一旦连接上,速度有保证,当瞬间访问压力比较大的时候,服务器不可用

  • 短连接

    一次连接,一次传输,就关闭

    特点:

    会频繁的建立和断开连接,当瞬间访问压力比较大的时候,服务器响应过慢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值