1.内容回顾

2.验证客户端的合法性

3.block + 进度条

4.数据的输入和输出(铺垫并发编程)(操作系统基础)

5.进程的概念+sys.argv

1.内容回顾

# udp协议 和 tcp协议
# udp协议 :传输速度快、不可靠、无连接、面向数据包的
# tcp协议 :传输速度慢、可靠的、面向连接的、流式传输、全双工
  # 三次握手、四次挥手
  # 同一时间只能允许一个客户端和server端建立连接 - 原生socket
  # 传输速度的快慢是如何决定的?udp不需要消息回执,tcp需要回执
# socketserver
  # 写一个socket的server端,能够同时和多个client端进行通信
  # socketserver 的server端不能用input
# 如何写
  # 第一、必须继承socketserver.BaseRequestHandler
  # 第二、自定义一个类必须实现handle方法
  # 第三、自定义类中的self.request就是conn
    # 如何启动这个程序?
    # obj = socketserver.ThreadingTCPServer((ip,port),自定义类名)
    # obj.serve_forever()

2.验证客户端的合法性

# 1.需要认证
  # 程序和用户打交道的时候才会用到用户认证
  # 对所有的客户端进行统一的认证

# 我现在要做的事情
  # 写一个server端
  # 写一个client端 特殊的 符合我的server端要求的代码

# 1.client端不会被其他机器获取到
# 2.即使客户端的代码不在别人手上 有心人仍然可以非法的访问我们的程序

# hashlib
# 密钥
# 随机的字符串

# server 密钥 发送一个随机字符串,密钥为盐,对随机字符串进行摘要 得到一个字符串结果
# client 密钥 密钥为盐,对随机字符串进行摘要 得到一个字符串结果 将结果发送回server端

import os
print(os.urandom(32))

import hmac
# obj = hmac.new(b'alexsb',os.urandom(32))
# print(obj.digest())
# hmac.compare_digest(res1,res2)

server

import osimport socketimport hmac

def auth(conn):    secret_key = b'alexsb'    rand_b = os.urandom(32)  # 32字节随机数btyes    conn.send(rand_b)    obj = hmac.new(secret_key, rand_b)  # 计算    res1 = obj.digest()  # 返回bytes    res2 = conn.recv(1024)    cmp_res = hmac.compare_digest(res1, res2)  # 比较返回T or F    return cmp_res

sk = socket.socket()sk.bind(('127.0.0.1',9600))sk.listen()conn,addr = sk.accept()res =auth(conn)if res:    print('是合法的客户端')    conn.send('你好'.encode())else:    conn.close()

conn.close()sk.close()

client

import socketimport hmac

def auth(sk):    secret_key = b'alexsb'    rand_b = sk.recv(1024)    obj = hmac.new(secret_key, rand_b)    res2 = obj.digest()    sk.send(res2)

sk = socket.socket()sk.connect(('127.0.0.1',9600))auth(sk)msg = sk.recv(1024)print(msg.decode())

sk.close()

3.block + 进度条

# 阻塞模型
  # accept
  # recv
  # recvfrom

# 非阻塞
  # accept
  # recv
  # recvfrom

import socket

sk = socket.socket()sk.setblocking(False)  #将阻塞设置不阻塞sk.bind(('127.0.0.1',9600))sk.listen()while True:  #会报错,加except解决    try:        sk.accept()    except BlockingIOError:        pass

进度条

import timefor i in range(0,101,2):     time.sleep(0.1)     char_num = i//2      #打印多少个'*'     per_str = '\r%s%% : %s\n' % (i, '*' * char_num) if i == 100 else '\r%s%% : %s'%(i,'*'*char_num)     print(per_str,end='')print('其他的内容')

4.数据的输入和输出(铺垫并发编程)(操作系统基础)

# I/O操作
# 文件、网络

# i = input 输入
  # 从任何其他地方 --> 内存
    # 读文件、json.load
    # 从网络上接收信息
# o = output 输出
  # 内存 --> 放到任何其他地方
    # 写文件、json.dump
    # 向网络上发送 send sendto

# cpu
  # 主要用来做计算用
# 内存
  # 存储数据 断电消失 存取速度快
# 硬盘
  # 存储数据 读取速度慢 永久存储

# 如何提高cpu的利用率

# 多道操作系统
# CPU的利用率极大提高
  # 数据隔离的概念
  # 操作系统的概念

# 研究生 :5min  没有IO操作
# 老教授 :24h  没有IO操作
# 让谁先计算?
  # 先来先计算算法
    # 5min 24h 5min
  # 短作业优先算法
# 分时操作系统
  # 时间片
  # 每一个任务都执行一个时间片的时间,这样就能让多个任务在同一个时间段内看起来是共同执行的
  # 极大的提高了用户体验
# 单纯的 由于时间片到了 就切换任务,能不能节省时间?

# 分布式

# 进程
  # 进行中的程序
# 进程
  # 每一个进程都有一个唯一的进程id
  # 进程 :所有的进程与进程之间的 内存 是隔离的
  # 进程是计算机中最小的资源分配单位

5.进程的概念+sys.argv

# 并行和并发
# 进程的三状态 : 就绪、运行、阻塞(三状态图)
# 同步异步 :
# 同步 一件事情的执行必须依赖另一件事情的结束,强调的是两件事情的顺序性
# 异步 两件事情可以同时进行
# 阻塞非阻塞 :
# 同步阻塞 :
# 异步阻塞 :
# 同步非阻塞 : a+b+c =d + c
# 异步非阻塞 :

# sys.argv  #添加知识
import sys # python解释器
print('我正常的逻辑')
# print(sys.argv) # 在执行python文件的时候
# python 某文件   C:\Python36\python.exe  D:/python骑士计划3期/day26/5.进程的概念.py
# python 某文件 参数1 参数2 参数3

# argv指参数
# sys.argv是python解释器在运行的时候传递进来的参数

# if sys.argv[1] == 'alex' and sys.argv[2] == 'sb':
  # print('登陆成功')
# else:
  # print('登陆失败')
  # exit()
# print('登陆成功之后可以做很多很多操作')

最新文章

  1. Something about Linux
  2. Python scikit-learn机器学习工具包学习笔记:feature_selection模块
  3. 30、准确计算CoreText高度的方法
  4. .Net事件管道详解图
  5. JDBC链接MySQL和Oracle
  6. codeforces 615D - Multipliers
  7. JMeter入门(4):Java Request实例
  8. bzoj4447 SCOI2015 小凸解密码 password
  9. python学习===判断两个日期的间距天数
  10. Oracle Start With关键字
  11. JAVA_SE基础——50.接口关系下的多态
  12. 笔记,ajax,事件绑定,序列化
  13. web工程迁移---在一个jboss5或jboss6中运行多个实例
  14. Python代码注释应该怎么写?
  15. AccessText热键的使用
  16. select 实现多路复用IO的server_socket
  17. 高可用OpenStack(Queen版)集群-3.高可用配置(pacemaker&haproxy)
  18. MyEclipse开发Rest服务入门
  19. SimpleDateFormat格式化日期以及日期的相关操作
  20. linq的左连接右连接内连接用法

热门文章

  1. 画多边形form并填充背景色(可以实现圆角边框 有锯齿)
  2. Magento 2.2.5和2.2.6的bug 产品设置special price又删除后价格排序有误
  3. 浏览器解析JavaScript的原理
  4. bzoj 3513: [MUTC2013]idiots FFT
  5. spring事务的7种传播行为
  6. Numpy 基础
  7. IDEA Maven项目的Mybatis逆向工程
  8. python打包exe
  9. 自定义 Cordova插件详解
  10. LINQ to Entities 不识别方法“System.DateTime AddDays(Double)