week8
---恢复内容开始---
week8
1、动态导入模块
2、断言
3、ftp
4、socketserver
1、动态导入模块
import importlib
a = importlib.import_module('aa.aa') # aa目录下的aa模块
print(aa.import_C().name)
2、断言
跟if有点类似,判断是否符合条件,是则继续,否则报错。
a = 'name'
assert type(a) is str
3、FTP(文件传输:单下载)
客户端
1、读取文件名
2、检测文件是否存在
3、打开文件
4、检测文件大小
5、发送文件大小给客户端
6、客户端确认
7、开始边读边发数据
8、md5 import socket,os,hashlib
server = socket.socket()
server.bind(('localhost',9999))
server.lisen()
m = hashlib.md5()
while True:
try:
conn,addr = server.accept()
data = conn.recv(1024)
cmd,filename =data.split()
if os.path.isfile(filename):
f = open(filename,'rb')
filesize = f.stat(filename).st_size
conn.send(str(filesize).encode())
conn.recv(1024)
for line in f:
m.update(line)
conn.send(line)
print(m.hexdigest())
conn.send(str(hexdigest).encode)
f.close
print(send done')
except ConnectionResetError as e:
print('连接错误',e)
server.close()
客户端
import socket,os,hashlib
client = socket.socket()
client.connect(('localhost',9999))
m = hashlib.md5
while True:
cmd = imput('>>>:').strip()
if len(cmd) == 0:continue
filesize = client.recv(1024)
client.send('请求发送’) #无实际意义的交互,防止粘包
filename = cmd.split[1]
f = open(filename+'.new','wb')
rec_filesize = 0
filesize = int(filesize.decode())
while filesize > rec_filesize:
if filesize - rec_filesize > 1024: # 做判断防止最后一次接收出现粘包
res_size = 1024
else:
res_size = filesize - rec_filesize
data = client.recv(res_size)
f.write(data)
rec_filesize += len(data)
m.update(data)
else:
new_file_md5 = m.hexdigest()
print('new file md5:',new_file_md5)
server_file_md5 = client.recv(1024)
print('server file md5',server_file_md5) #接收服务端读取的md5,与自己生成的md5进行比较
client.close
服务端
4、socketserver(面向对象的方法进行文件传输)
创建方式:
创建一个socketserver 至少分以下几步: First, you must create a request handler class by subclassing the BaseRequestHandlerclass and overriding its handle() method; this method will process incoming requests.
Second, you must instantiate one of the server classes, passing it the server’s address and the request handler class.
Then call the handle_request() orserve_forever() method of the server object to process one or many requests.
Finally, call server_close() to close the socket. self.setup 请求处理前进行的事项
self.handle 请求处理中的事项
self.finish 请求处理后的事项
import socketserver class MyTCPServer(socketserver.BaseRequestHandler):
def setup(self): #交互前的动作
pass
def handle(self): #与用户的所有交互都在这里进行
self.data = self.request.recv(1024)
print("{} wrote:".format(self.client_address[0]))
self.request.sendall(self.data.upper)
def finish(self): #与用户交互后的动作
pass if __name__ == '__main__'
HOST , PORT = 'localhost',9999
server = socketserver.ThreadingTCPServer((HOST,PORT),MyTCPServer)
#ThreadingTCPServer 多线程
#ForingTCPServer 多进程 在win不好使
server.server_forever()
客户端
week8的更多相关文章
- 小课堂Week8 例外处理设计的逆袭Part1
小课堂Week8 例外处理设计的逆袭Part1 今天和大家讲一本书,书名是<例外处理设计的逆袭>. 为什么想讲这本书,是因为,例外处理在程序代码中到处存在,但是这些到底该如何写好,总觉得有 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp5 MSF基础应用 Week8
<网络对抗技术>Exp5 MSF基础应用 Week8 一.实验目标与内容 1.实践内容(3.5分) 本实践目标是掌握metasploit的基本应用方式,重点常用的三种攻击方式的思路.具体我 ...
- 【week8 in ricoh】 Learning CNN
week8:5.27 1.做CNN practical[1]里的example1,了解CNN模块中的每一个部分 (1)卷积层的卷积过程,输入输出维度变化(2)ReLU(3)Pooling层(4)Nor ...
- Python笔记总结week8
面向对象第二节 要点: 1. 封装,对象中嵌套对象 2. pickle,load,切记,一定要先导入相关的类 回顾上一节: 面向对象三大特性: 封装.继承.多态(多种类型.多种形态) 关于多态,任意参 ...
- 团队作业week8
每个团队编写一个团队项目的功能规格说明书.
- Week8 软件规格说明书
1.概述 本项目组所开发的软件为一个基于Android的手机端的时间管理软件,主要功能为时间管理软件,可以用于管理待办事项,记录一些需要提醒的信息等.有事件提醒.与Google账户同步.课程表等功能. ...
- 《Linux内核分析》 week8作业-Linux加载和启动一个可执行程序
一.ELF文件格式 ELF(Executable and Linking Format)是x86 Linux系统下常用的目标文件格式,有三种主要类型: 适于连接的可重定位文件,可与其他目标文件一起创建 ...
- Week8(10月28日)
Part I:提问 =========================== 1. Lazy.Eager.Explicit Loading的关键字是什么? 2. 请比较三种加载方式的性能. Part ...
- Week8(10月31日):并发
Part I:提问 =========================== 1. 更新关联.删除关联数据,需要注意哪些问题?以Instructor类为例说明. 2. 已知某请假系统,请实现以下界面的 ...
随机推荐
- Django 中 form 介绍
目录 Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用 ...
- 复旦大学2018--2019学年第一学期高等代数I期末考试情况分析
一.期末考试成绩90分以上的同学(共21人) 周烁星(99).封清(99).叶雨阳(97).周子翔(96).王捷翔(96).张思哲(95).丁思成(94).陈宇杰(94).谢永乐(93).张哲维(93 ...
- Pycharm在运行过程中,查看每个变量的方法(show variables)跟终端一样显示变量
点击运行栏的这个灰色向下剪头: 在出现的窗口上,勾选上: 点击OK,重启Pycharm:接着点击Run窗口: 将Run的show variables图标勾选: 然后你就会发现,在右边出现了变量的窗口:
- P4630 [APIO2018] Duathlon 铁人两项
思路 圆方树,一个点双中的所有点都可以被经过,所以给圆点赋值-1,方点赋值为圆点个数,统计圆点两两之间的路径权值和即可 代码 #include <cstdio> #include < ...
- 深度学习环境搭建(ubuntu16.04+Titan Xp安装显卡驱动+Cuda9.0+cudnn+其他软件)
一.硬件环境 ubuntu 16.04LTS + windows10 双系统 NVIDIA TiTan XP 显卡(12G) 二.软件环境 搜狗输入法 下载地址 显卡驱动:LINUX X64 (AMD ...
- loadrunner转码两种方式
1.//使用转换函数将resp值做编码转换并存入msg lr_convert_string_encoding(“佛挡杀佛”),"utf-8",NULL,"msg" ...
- 线段树(segment_tree)
线段树之——区间修改区间查询 1.概述 线段树,也叫区间树,是一个完全二叉树,它在各个节点保存一条线段(即“子数组”),因而常用于解决数列维护问题,基本能保证每个操作的复杂度为O(lgN). 线段树是 ...
- 稠州银行数字化转型:打造银行数据大脑,建立全新数字化DNA
数字经济时代,银行如何进行数字化转型?业务模式转型与科技转型如何协同并进? 2019年1月4日,在上海蚂蚁金服ATEC城市峰会上,浙江稠州商业银行(以下简称“稠州银行”)副行长兼首席信息官程杰分享了稠 ...
- CF Manthan, Codefest 16 B. A Trivial Problem
数学技巧真有趣,看出规律就很简单了 wa 题意:给出数k 输出所有阶乘尾数有k个0的数 这题来来回回看了两三遍, 想的方法总觉得会T 后来想想 阶乘 emmm 1*2*3*4*5*6*7*8*9 ...
- 虹软离线人脸识别 ArcFace 2.0 Demo [C++]
环境: win10(10.0.16299.0)+ VS2017 sdk版本:ArcFace v2.0 OPENCV3.43版本 x64平台Debug.Release配置都已通过编译 下载地址:http ...