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. 已知某请假系统,请实现以下界面的 ...
随机推荐
- docker介绍
一.docker的定义 docker是一个平台,开发人员进行docker应用的开发和系统管理人员对docker应用部署和管理. 二.docker与Virtual Machine的区别 三.docker ...
- inputClient.js
$(document).ready(function () { loadData();}); //初始化数据function loadData(){ loadMList();//加载数据 $(&quo ...
- .equals()到底是什么意思?
.equals() 在Java中判断是否相等,与 == 的区别是 .equals() 只判断值是否相等,不管两者是否存在同一地址.而 == 则是判断值与存在地址都得相等 扩展资料: 由equals的源 ...
- Oracle插入语句日期格式设置
insert into test values (1,'2015-01-01'); 直接设置成字符串,会报出“文字与格式字符串不匹配”的异常: 如果正确插入,则要将字符型数据转成日期型数据: 1 in ...
- 持久层Mybatis3底层源码分析,原理解析
Mybatis-持久层的框架,功能是非常强大的,对于移动互联网的高并发 和 高性能是非常有利的,相对于Hibernate全自动的ORM框架,Mybatis简单,易于学习,sql编写在xml文件中,和代 ...
- Mysql 5.7--ubuntu18.04 安装过程及遇到的问题
Mysql 5.7安装过程 1. 下载mysql的apt-config文件 a. https://dev.mysql.com/downloads/file/?id=477124 b. 点击downlo ...
- ImportFileHandler 附件上传
using System; using System.Collections.Generic; using System.Linq; using System.Web; using LitJson; ...
- 清除控制台 console
清除控制台 console.log(1) // console.clear() // CTRL + K // Ctrl + L // process.stdout.write('\033c'); // ...
- RFS常见问题
一.DatabaseLibrary 库遇到的问题:1,连接mysql库,查询语句带有中文,报FAIL UnicodeEncodeError: 'latin-1' codec can't encode ...
- Vue小项目二手书商城:(三)前端渲染数据
实现内容: axios取到的数据在前端使用(父子组件各自应该怎么使用) 一.简单使用(在哪取在哪用) 1.在App.vue中script中加上data(data专属于当前组件,父子组件传参通过prop ...