Python高级——03

3.1. 内容回顾

3.2. 实战:《系统性能定时监控》-邮件监控

思路:

  • 导入模块 import yagmail
  • 创建发件对象 yagmail.SMTP(user=“发件人邮箱”, password=“邮箱授权码”, host=“发件服务器”)
  • 发送邮件 obj.send(“收件人”, “主题”, “内容”)
# 判断 内存超过80%  CPU超过80%
    if cpu_per > 80 or memory_info.percent > 90:
        # 8、发送邮件
        ya_obj = yagmail.SMTP(user="****@163.com", password="*****", host="smtp.163.com")
        # 8.1、使用yagmail 对象发送邮件(指定收件人、邮件主题、发送的内容)
        # send(指定收件人、邮件主题、发送的内容) 发送邮件
        ya_obj.send("py_test@126.com", "[系统监控报告]", log_str)

3.3. 虚拟环境

python虚拟环境:允许安装不同版本的套件

  • 创建:mkvirtualenv 虚拟环境名称 默认python版本2.7
  • 进入:workon 虚拟环境名称
  • 查看所虚拟环境: workon + 回车
  • 删除:1)先退出虚拟环境 2) rmvirtualenv 虚拟环境名称
  • 退出:deactivate
  • 创建虚拟环境,指定Python路径: mkvirtualenv -p /usr/bin/python3.6 xxx
  • 在虚拟环境中安装套件: pip install 套件名==版本

3.4. 网络通信概述

  • 什么是网络:

    一些以共享资源为目的的计算机的集合

  • 学习网络的目的:

    能够网络编程。

    网络编程:通过编写程序实现计算机之间能进行数据的传递

3.5. [重点]ip地址(重点)

  • ip地址:网络设备为网络中的每台计算机分配的一个唯一的标识
  • ip地址v4 : 点分 10机制 xxx.xxx.xxx.xxx 每一段0~255
  • ip地址分类:常用的是C类地址
  • 私有IP地址: 172.16.xxx.xxx 192.168.xxx.xx
  • 本地地址: 127.0.0.1
  • IPv6: 冒号分 16进制

3.6. Linux命令(ping、ifconfig等)

  • 虚拟机联网方式
    • NAT 虚拟机跟物理主机共用网络
    • 桥接: 虚拟机能够获取局域网的IP地址(同学之间互相访问)
  • ifconfig 查看IP地址
  • ping 检测某个主机是否建立连接

3.7. [重点]端口(重点)

  • 端口:可以认为是设备与外界通讯交流的出口

  • 分类:知名端口、动态端口

    • 知名端口 0~1023 固定不变,用户也不能用

      21 FTP服务

      22 SSH服务

      80 Web服务器

    • 动态端口 1024~65535 程序可以绑定

  • 端口查看 netstat

    • 查看所有:netstat -an
    • 搜索某一个端口:netstat -an | grep :22
    • 查看某个端口,是哪个程序使用:sudo lsof -i :22

3.8. [重点]网络传输方式

  • 面向无连接

    两台计算机通信的时候,不需要建立连接(逻辑)就可以进行数据的收发,数据可能会丢

    • 传输协议: UDP
  • 面向有连接

    两台计算机通信的时候,需要先建立连接,再能通信

    • 传输协议:TCP

3.9. [重点]socket简介

  • socket 网络通信的基本单元,提供的方法可以实现数据的发送和接收

  • 创建套接字

    1、导入模块

    import socket

    2、创建套接字

    # socket.socket(协议类型,传输方式)
    # 参数一:
    # socket.AF_INET 使用IPv4
    # socket.AF_INET6 使用IPv6
    # 参数二:
    # socket.SOCK_DGRAM 使用UDP的传输方式(无连接)
    # socket.SOCK_STREAM 使用TCP的传输方式(有连接)
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    

    3、数据传输

    4、关闭套接字

    udp_socket.close()

3.10. [重点]udp网络程序-发送数据

思路:

  • 导入模块

    import socket

  • 创建套接字

    # socket.AF_INET  IPv4
    # socket.SOCK_DGRAM UDP
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    
  • 发送数据

    udp_socket.sendto(数据,ip和端口)

    • 数据必须是二进制格式 字符串.encode()
    • ip和端口必须是是元组,(“ip地址”, 端口号)
  • 关闭连接

    upd_socket.close()

win系统需要开启网络调试助手

  • 设置 协议方式 UDP
  • 设置ip地址
  • 设置端口
  • 连接网络

3.11. [重点]udp网络程序-发送并接收数据

  • 发送数据,同上

  • 接收数据

    recv_data = udp_socket.recvfrom(1024) 每次接收1024个字节

    recv_data 是一个元组

    1)第一个元素 收到的数据的二级制

    2)第二个元素 元组,发送方的ip和端口

    • 把接收的数据解码 二进制 —》 字符串

      二进制数据.decode(“GBK”)

3.12. [重点]python3编码转换

  • 编码

    字符串.encode() 默认UTF-8字符串

  • 解码

    二进制.decode() 默认UTF-8字符集

  • 解码失败的处理

    decode(encoding=“字符集”, errors=“错误处理方式”)

    错误处理方式有两种:ignore 忽略, strict 严格

3.13. udp绑定端口-发送端

  • 核心方法,bind()

    # udp_socket.bind(address)
    # address 是一个元组,元组的第一个元素是字符串类型的IP地址,第二个元素 整数端口号
    udp_socket.bind(("192.168.150.25", 8888))
    

    绑定,必须绑定自己的地址

3.14. [重、难点]udp绑定端口-接收端

  • bind()

    udp_socket.bind(("", 8888))

    ip地址尽可能写为"",好处当计算机由多个网卡的时候,不同网卡的数据都能被接收

3.15. UDP广播

广播地址:xxx.xxx.xxx.255 或者 255.255.255.255

思路:

  • 导入模块

    import socket

  • 创建套接字

    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

  • 设置广播权限

    # PermissionError: [Errno 13] Permission denied
    # udp_socket.setsockopt(套接字,属性,属性值)
    # socket.SOL_SOCKET 当前的套接字
    # socket.SO_BROADCAST 广播属性
    udp_socket.setsockopt(socket.SOL_SOCKET,socket.SO_BROADCAST,True)
    
  • 发送数据

    # udp_socket.sendto("哈哈,打不过我吧~".encode(), ("255.255.255.255", 8080))
    udp_socket.sendto("哈哈,打不过我吧~".encode(), ("192.168.150.255", 8080))
    
  • 关闭套接字

    udp_socket.close()

3.16. [难点]案例:udp聊天器(一)

  • send_msg() 发送信息
  • recv_msg() 接收信息
  • main() 主入口

3.17. [难点]案例:udp聊天器(二)

  • 发送信息

    input()

    udp_socket.sendto(content.encode(), (ipaddr, int(port)))

  • 接收信息:

        recv_data, ip_port = udp_socket.recvfrom(1024)
        # 2)解码数据
        recv_text = recv_data.decode()
        # 3)输出显示
        print("接收到[%s]的消息:%s" % (str(ip_port), recv_text))
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值